我在 StackOverflow 上发现了类似的问题,但我的问题不同。
给定一个字符串s
包含小写字母alphabet
。我想找到Longest common Prefix
所有子字符串的长度。
例如
s = 'ababac'
那么子串如下:
1: s(1, 6) = ababac
2: s(2, 6) = babac
3: s(3, 6) = abac
4: s(4, 6) = bac
5: s(5, 6) = ac
6: s(6, 6) = c
现在,LCP
所有子串的长度如下
1: len(LCP(s(1, 6), s)) = 6
2: len(LCP(s(2, 6), s)) = 0
3: len(LCP(s(3, 6), s)) = 3
4: len(LCP(s(4, 6), s)) = 0
5: len(LCP(s(5, 6), s)) = 1
6: len(LCP(s(6, 6), s)) = 0
我正在使用逐个字符匹配
string commonPrefix(string s1, string s2) {
int minlen = minlength1(s1, s2);
char current;
int result = 0;
for (int i=0; i<minlen; i++) {
current = s1[i];
for (int j=1 ; j<n; j++)
if (s2[i] != current)
return result;
result++;
}
return result;
}
但是,它仍然是 O(n2)。我知道所有子字符串都相互重叠,可以进一步优化。任何人都可以帮助优化此代码吗?