我必须告诉字符串A
需要重复的最小次数,以便字符串B
成为A
的子字符串。
对于这样的一些测试用例,我的答案是错误的
A = "abc"
B = "cabcabca"
我的输出是3…应该是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;
}
}
问题是因为A=A+A;
,因为它使A
在第一次迭代后成为abcabc
,使abcabcabcabc
在第二次迭代后变成abcabcabcabcabcabcabcabc
,依此类推,即字符串在每次迭代中都会加倍,而不是被附加。
这就像你被赋予了一项任务,在每次迭代中将2
添加到自己身上,即在第一次迭代后,它应该变成2 + 2 = 4
,在第二次迭代后变成4 + 2 = 6
,在第三次迭代后应该变成6 + 2 = 8
,依此类推
而按照您所做的方式,它在第一次迭代后将变成2 + 2 = 4
,在第二次迭代后变成4 + 4 = 8
,在第三次迭代后成为8 + 8 = 16
,依此类推
附带说明一下,您应该避免在循环中使用字符串串联。您还应该遵循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