user13066649:
私は倍の列の最小数伝える必要がありA
、その文字列がように繰り返される必要があるとB
のサブなりましたA
。
私の答えは、のようないくつかのテストケースのために間違っています
A = "abc"
B = "cabcabca"
私の出力は3..itは4でなければなりません来ています。
私のコードは -
class Solution {
public int repeatedStringMatch(String A, String B) {
int count = 0;
while (A.length() <= 1000) {
if (A.indexOf(B) != -1)
return (count + 1);
else
A = A + A;
count++;
}
return -1;
}
}
アービンド・クマールのAvinash:
問題は、でありA=A+A;
、それはなるようにA
ようにabcabc
、最初の反復の後にabcabcabcabc
、第2の反復の後にabcabcabcabcabcabcabcabc
第3の反復後、すなわちオンの代わりに添付取得ので、ストリングは各反復で倍増してきています。
それはあなたが追加するタスクが与えられているようである2
最初の反復の後、各反復IEでそれ自体には、それがなるべき2 + 2 = 4
、2回目の反復の後、それがなるべき4 + 2 = 6
、3回目の繰り返しの後にそれがなるべき6 + 2 = 8
とそうで。
あなたが行っている方法のに対し、それはなり2 + 2 = 4
、最初の反復の後4 + 4 = 8
、2回目の反復の後に8 + 8 = 16
3回目の繰り返しなどの後。
注意点として、あなたはループ内で文字列の連結を使用しないでください。また、従うべきであるJavaが命名規則変数名は例えばA
なければなりませんa
。
次のように実行します。
public class Main {
public static void main(String[] args) {
// Test
System.out.println(repeatedStringMatch("abc", "cabcabca"));
}
static int repeatedStringMatch(String a, String b) {
int count = 1;
StringBuilder sb = new StringBuilder(a);
while (sb.length() <= 1000) {
if (sb.indexOf(b) != -1) {
return count;
} else {
sb.append(a);
count++;
}
}
return -1;
}
}
出力:
4