给定一个字符串数组,找到由最大数量的其他字符串组成的字符串 包含在同一个数组中的字符串。
> e.g. “rat”, ”cat”, “abc”, “xyz”, “abcxyz”, “ratcatabc”, “xyzcatratabc”
>
> Answer: “xyzcatratabc”
>
> “abcxyz” contains 2 other strings,
>
> “ratcatabc” contains 3 other strings,
>
> “xyzcatratabc” contains 4 other strings
我已经提出了一个使用DP的O(n *(Avgg_length_of_string ^ 2))解决方案。
在字符串的每个可能的子字符串中弥补可能的中断,并检查最大性。 回忆将为我们提供所需的复杂性。
还有其他最佳(时间限制)方法来解决此问题。
答案 0 :(得分:1)
Aho-Corasick algorithm需要O(m)来创建树,其中m是所有字符串的总长度。搜索每个字符串需要O(n + z),其中n是字符串的长度,z是找到的匹配数。所以看起来你可以在O((2 * total_string_length) + number_of_matches)
中完成。
但是,它需要为树提供额外的O(m)内存。