交错规则是通过将一个单词插入到另一个单词中,以逐字母的方式形成一个新单词,如下所示:
a p p l e
o l d
=
aoplpdle
首先出现哪个词无关紧要。 (oalpdple也有效)
问题是一个字符串向量{old,apple,talk,aoplpdle,otladlk},找到所有来自向量的两个字的有效交错的单词。
最简单的解决方案要求至少O(n ^ 2)时间复杂度,取每两个字并形成一个交错字,检查它是否在向量中。
有更好的解决方案吗?
答案 0 :(得分:1)
按长度排序。您只需要检查两个条目(单词...)的长度总和等于现有条目长度的组合。
这会降低您的平均复杂程度。我没有花时间计算最差的复杂性,但它也可能低于O(n ^ 2)。
您还可以优化"内循环"通过尽早拒绝匹配 - 你真的不需要构造整个交错的词来拒绝匹配 - 在2个输入词旁边迭代候选词,直到你发现不匹配为止。这不会降低您最糟糕的复杂性,但会对整体性能产生积极影响。