説明:
二つの文字列AとBを考えると、AはBがそれのサブあるように繰り返されなければならない時間の最小数を見つけます。そのような解決策場合は、-1を返します。
例えば、A = "ABCD" とB = "cdabcdab" と。
三回(「abcdabcdabcd」)を繰り返すことによって、Bがそれのサブストリングであるため、3を返します。そしてBは、繰り返し2回サブストリング(「たとえばABCDABCD」)ではありません。
注意:
の長さA
とB
1と10000の間となります。
容認されました
73870
提出
233180
溶液:
最初の試み:失敗した原因TIME OUT例外へ
Apparantly、文字列Bが非常に長い、そしてAが極端に短い、繰り返し回数場合はこのように、タイムアウト例外を引き起こすほとんどの文字列Bと同じ長さです。
クラスソリューション{ 公共 のint repeatedStringMatch(列A、列B){ 場合(A == NULL || A.length()== 0 ){ 戻り -1 。 } int型時間=てb.length()/ A.length()+ 2 ; // のSystem.out.println(リピート(A、3).indexOf(B))。 以下のために(int型 i = 1; iが<=回; iは++ ){ 場合(リピート(A、I).indexOf(B)> - 1 ){ リターンI。 } } 戻り -1 。 } 静的文字列の繰り返し(列A、INTB){ 文字列結果 = 。 以下のために(int型 ; iはB <I ++はi = 1 {) 結果 =結果+ 。 } 戻り値の結果; } }