私はこの文字列操作の問題を解決しようとしています。そこでは、特定の文字列の最小周期を見つける必要があります。
ストリングは、長さkの別のストリングの1つ以上の繰り返しを連結することによって形成できる場合、周期kを持っていると言われます。
たとえば、文字列「abcabcabcabc」は、文字列「abc」の4回の繰り返しによって形成されるため、期間3があります。また、期間6(「abcabc」の2回の繰り返し)と12(「abcabcabcabc」の1回の繰り返し)があります。これが私のコードです:
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
元の文字列を一度に1文字ずつループして、文字列を形成しています。その後、文字列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.