我正在尝试解决这个字符串操作问题,我需要找到给定字符串的最小周期。
如果一个字符串可以通过连接另一个长度为 k 的字符串的一个或多个重复来形成,则称该字符串具有周期 k。
例如,字符串“abcabcabcabc”的句号为 3,因为它由字符串“abc”的 4 次重复组成。它也有周期 6(“abcabc”的两次重复)和 12(“abcabcabcabc”的一次重复)。这是我的代码:
public static int getPeriod(String str){
int len=str.length();
boolean flag=false;
int i;
for (i=0;i<len;i++){
String s=str.substring(0,i);
String tmp=str;
while(tmp.length()>0){
if(tmp.startsWith(s)){
tmp=tmp.substring(0,i);
flag=true;
}
else {
flag=false;
continue;
}
}
if (flag==true)
break;
}
return i;
}
我s
通过循环遍历原始字符串来形成一个字符串,一次一个字符。之后,我正在检查是否可以通过连接字符串s
任意次数来完全耗尽原始字符串。
错误:
该方法始终返回 0。
为什么呢 ?
编辑:我的算法
让我们考虑输入字符串HoHoHo
First step: s=H
tmp= HoHoHo
tmp= oHoHo (after substringing tmp)
'o' isn't the same as s, so we increase i
Second step:s=Ho
tmp= HoHoHo
tmp= HoHo (after substringing tmp)
tmp= Ho (after substringing tmp)
tmp= "" (after substringing tmp)
Return the value of i, that is 2.