假设给定一个字符串 S,以及一个包含其他一些字符串 L 的列表。
我们如何知道 S 是否是 L 的所有可能连接之一?
例如:
S = "abcdabce"
L = ["abcd", "a", "bc", "e"]
S 是“abcd”+“a”+“bc”+“e”,那么 S 是 L 的串联,而“ababcecd”不是。
为了解决这个问题,我尝试使用 DFS/回溯。伪代码如下:
boolean isConcatenation(S, L) {
if (L.length == 1 && S == L[0]) return true;
for (String s: L) {
if (S.startwith(s)) {
markAsVisited(s);
if (isConcatnation(S.exclude(s), L.exclude(s)))
return true;
markAsUnvisited(s);
}
}
return false;
}
然而,DFS/回溯并不是一个有效的解决方案。我很好奇解决这个问题的最快算法是什么,或者是否有任何其他算法可以更快地解决这个问题。我希望有像 KMP 这样的算法,可以在 O(n) 时间内解决它。