【发布时间】:2021-10-23 00:03:25
【问题描述】:
我有一个这样的单词列表:
string[] listWords = "la,lam,lan,son,som,some,mos,mao,sehi,noesrh,nroeh,doise".Split(',');
上面列出的单词是字符的组合,它们都有含义。我们可以暂时称它为字典。
接下来,我有多个这样的字符数组列表:
string[] charArr1 = "a,j,s".Split(',');
string[] charArr2 = "c,l,o".Split(',');
string[] charArr3 = "d,m,n".Split(',');
string[] charArr4 = "n,e,w".Split(',');
string[] charArr5 = "f,o,x".Split(',');
string[] charArr6 = "h,q,z".Split(',');
string[] charArr7 = "i,r".Split(',');
我想将字符连接在一起。对于每个 charArray,我将取出 1 个字符并将它们连接在一起成为单词,然后我将检查这些连接的单词是否在 listwords[] 列表中。如果存在,我会将单词保存在 saveWords[] 数组中。 条件:
- 同一个 charArray[] 的字符不连接在一起,每个 charArray[] 每次只能选择一个字符。
- 匹配所有案例,不错过任何案例。
例如:
- a+c -> ac(匹配正确)-> 在 listwords[] 中搜索 -> 不出现
- a+j(匹配不当)
- a+s(匹配不当)
- a+c+d -> acd(正确匹配)-> 在 listwords[] 中搜索 -> 不出现
- s+e+i+h -> seih(匹配正确)-> 在 listwords[] 中搜索 -> 不出现
- s+e+h+i -> sehi (匹配正确) -> 在 listwords[] 中搜索 -> 如果这个词出现 -> 保存到 saveWords[] 数组
我的意思是字符的连接不会漏掉任何大小写。例如:
- charArr1[]+charArr2[] -> 将匹配以下情况:a+c, a+l, a+o, j+c, j+l, j+o, s+c, s+l, s+o
- charArr2[]+charArr1[] -> 将匹配以下情况:c+a, c+j, c+s, l+a,l+j, l+s,o+a,o+j, o+s
- charArr1+charArr2+charArr3
- charArr1[]+charArr3[]+charArr2[]
- charArr2[]+charArr1[]+charArr3[]
- charArr2[]+charArr3[]+charArr1[]
- 等等……
请帮助我,因为我对算法感到困惑。非常感谢。
【问题讨论】:
-
在您的第五个示例 s+e+i+h(正确匹配)之前,我以为我理解了您要做什么。我看不出你如何通过做我认为你正在做的事情来获得 s+e+i+h,因为最后一个可用的“h”在 charArray6 中,直到 charArray7 才出现“i”。
-
感谢您回答我的问题。这个问题很难解释。我已经编辑了以上内容,以便您更轻松地进行可视化。
标签: c# arrays algorithm concatenation