【发布时间】:2018-04-16 14:17:12
【问题描述】:
如何根据模板生成所有字符串组合?
例如: -
的模板字符串“{我|我们}想要 {|2|3|4} {苹果|梨}”
花括号“{...}”标识一个或多个单词,每个单词用“|”分隔。
该类应该使用每个单词组中的每个单词组合生成字符串。
我知道它是有限自动机,也是正则表达式。如何高效生成组合?
例如
G[0][j] [想要] G[1][j] G[2][j]"
G[0] = {I, We}
G[1] = {2, 3, 4}
G[2] = {apples, pears}
首先,生成所有可能的组合 c = [0..1][0..2][0..1]:
000
001
010
011
020
021
100
101
110
111
120
121
然后对于每个 c 将 G[i][j] 替换为 G[i][c[i]]
【问题讨论】:
-
这是一种编程语言的工作,而不仅仅是正则表达式。
-
谷歌它。正则表达式不适用。听起来像嵌套循环。
-
上面的正则表达式可以保存为有限树,深度优先搜索给出所有可能的字符串
-
在循环中,C 伪代码类似于
pI[] = {'I','We'}; pJ[] = {'' ,'2','3','4'}; pK[] = {'apples','pears'}; for ( i = 0; i < 2; i++ ) { string strI = pI[i]; strI += 'want'; for ( j = 0; j < 4; j++ ) { strJ = strI + pJ[j]; for ( k = 0; k < 2; k++ ) { strK = strJ + pK[k]; print( strK ); } } } -
@sln 模板是输入(不是常量,只是示例)
标签: regex algorithm combinations