我的解决方案中的问题"Repeated string match"



我必须告诉字符串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

最新更新