这是其中一个问题,在任何更高级别的语言中都是小菜一碟,但是当用纯C语言编写它时,我不知道该怎么做才能不把我的代码变成一团糟:
我有一个独特字母的字母表,以及一些带有一些数字的字符串,例如"test01test21".我需要生成所有字符串,这些字符串是用字母替换数字(所以每个数字0,1,2,...得到它的字母(不一定是唯一的),我们需要遍历所有可能的字母数字替换,以便生成所有字符串),并以某种方式返回这些字符串.
问题似乎很容易,但我想的越多,问题就越多.当返回结果时,我已经编码了动态字符串列表结构,因此它不是主要问题.我想知道的是如何遍历所有字母数字替换(请记住,数字集不是常数,要在一个字符串中替换的数字可能是{0,1,2}而在另一个字符串中{例如,3,7,9},但它总是一些数字集合,这里有几种方法我做过这样的思考:
我真的想不出别的什么.我认为这两种方式都存在缺陷,导致代码非常复杂.问题是 - 当你必须在C中解决这类问题时该怎么办?我会感谢任何有助于我编写代码并以某种方式组织代码的提示......
样本输出:
字母"ab"
字符串"ab01"
输出{"abaa","abab","abba","abbb"}
您必须使用tries数据结构.刚开始阅读你的字符串并构建tries.让我们举个例子,它应该是这样的.
a a
| |
b b
| / \
0 --> a b
| / \ / \
1 a b a
| | |
\0 \0 \0
Run Code Online (Sandbox Code Playgroud)
上面例子中按字符构建的字符:
a ------ b ------- 0 ------- 1 ------- \0
a ----> a ------> a ------> a ------> a
| | | | |
\0 >b b b b
| / \ / \ / \
\0 >a b a >b a b
| | / \ | / \ / \
\0 \0 a b \0 a b a
| | | | |
\0 \0 \0 \0 \0
|
|
v
a
|
b
/ \
a b
/ \ / \
a b a
| | |
\0 \0 \0
Run Code Online (Sandbox Code Playgroud)
现在你所要做的就是遍历尝试.请查看这些有用的链接以获取帮助:1 2