【发布时间】:2017-04-18 17:41:45
【问题描述】:
我得到了字符串 str="abcdefghijklmnopqrstuvwxyz" 的无限环绕,所以它看起来像 "..zabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcd...." 和另一个字符串 p.
我需要找出 在无限环绕字符串 str 中存在多少个 p 的唯一非空子字符串?
For example: "zab"
There are 6 substrings "z", "a", "b", "za", "ab", "zab" of string "zab" in str.
我尝试在字符串 str 的特定串联中查找 p 的所有后缀,例如:"abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz"
一旦我得到一个作为上述一部分的后缀,我就会将它的所有子字符串添加到我的结果中,如下所示:
for (int i=0;i<length;i++) {
String suffix = p.substring(i,length);
if(isPresent(suffix)) {
sum += (suffix.length()*(suffix.length()+1))/2;
break;
} else {
sum++;
}
}
而我的 isPresent 函数是:
private boolean isPresent(String s) {
if(s.length()==1) {
return true;
}
String main = "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcde
fghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz";
return main.contains(s);
}
如果 p 的长度大于我在 isPresent 函数中假设的串联字符串,我的算法将失败!!
那么我应该如何找到子字符串而不考虑环绕字符串str?有没有更好的方法来解决这个问题?
【问题讨论】: