特殊的交织字符串编码

时间:2016-05-18 21:57:17

标签: string algorithm time-complexity big-o

交错规则是通过将一个单词插入到另一个单词中,以逐字母的方式形成一个新单词,如下所示:

a p p l e
 o l d
   =
aoplpdle

首先出现哪个词无关紧要。 (oalpdple也有效)

问题是一个字符串向量{old,apple,talk,aoplpdle,otladlk},找到所有来自向量的两个字的有效交错的单词。

最简单的解决方案要求至少O(n ^ 2)时间复杂度,取每两个字并形成一个交错字,检查它是否在向量中。

有更好的解决方案吗?

1 个答案:

答案 0 :(得分:1)

按长度排序。您只需要检查两个条目(单词...)的长度总和等于现有条目长度的组合。

这会降低您的平均复杂程度。我没有花时间计算最差的复杂性,但它也可能低于O(n ^ 2)。

您还可以优化"内循环"通过尽早拒绝匹配 - 你真的不需要构造整个交错的词来拒绝匹配 - 在2个输入词旁边迭代候选词,直到你发现不匹配为止。这不会降低您最糟糕的复杂性,但会对整体性能产生积极影响。