例如,如果输入字符串是helloworld,我希望输出如下所示:

do
he
we
low
hell
hold
roll
well
word
hello
lower
world
...

一直到最长的单词,它是helloworld的子字符串的字谜。例如在Scrabble中。
输入字符串可以是任何长度,但很少超过16个字符。

我已经进行了搜索,并提出了类似trie的结构,但是我仍然不确定如何实际执行此操作。

最佳答案

用于保存有效条目字典的结构将对效率产生巨大影响。将其组织为树,根为单数零字母“单词”,即空字符串。根的每个子代都是一个可能单词的单个第一个字母,子代是一个可能单词的第二个字母,依此类推,每个节点都标记了它是否真正构成一个单词。

您的测试器功能将是递归的。它以零个字母开头,从有效条目树中发现“”不是单词,但确实有子元素,因此您递归地调用测试人员的起始单词(不包含任何字母),并附加您的每个可用剩余字母输入字符串(此时所有的字符串)。检查树中的每个单字母条目(如果有效);如果是 child ,则重新调用测试器功能,并附加剩余的可用字母,依此类推。

因此,例如,如果您输入的字符串为“helloworld”,则将首先使用“”调用递归测试器函数,并将其余可用字母“helloworld”作为第二个参数传递。函数可以看到“”不是单词,但是子级“h”确实存在。因此它用“h”和“elloworld”来称呼自己。函数可以看到“h”不是单词,但是存在子项“e”。因此,它用“he”和“lloworld”来称呼自己。函数看到“e”被标记,因此“he”是一个单词,请注意。此外,存在子“l”,因此下一个调用是“loworld”和“hel”。接下来,它将再次找到“hell”,然后是“hello”,然后必须先退出,然后可能再次找到“hollow”,然后再次完全退出到空字符串,然后再以“e”个单词开头。

10-07 19:09
查看更多