题目来源于力扣(LeetCode)
一、题目
题目相关标签:字符串
注意:
A
与B
字符串的长度在1和10000区间范围内。
二、解题思路
-
通过对字符串 A 叠加 N 次使得新字符串中包含字符串 B,那么简单的思路就是循环对字符串 A 叠加,若新字符串中包含字符串 B,则返回叠加次数
-
但是需要注意的是,若字符串 A 为 "abc",字符串 B 为 "abcdabcd",那么字符串 A 叠加无数次也得不到包含字符串 B 的结果
-
增加限制条件,若叠加后的字符串长度大于字符串 A 与字符串 B 的长度后,仍不包含字符串 B 时,则返回 -1
三、代码实现
public static int repeatedStringMatch(String A, String B) {
StringBuilder sb = new StringBuilder();
sb.append(A);
// 若 maxLen 长度的字符串中未包含字符串 B,则说明无法通过叠加字符串 A,使得新字符串包含 B
int maxLen = A.length() + B.length();
// 已 append 一次,所以 ans 初始为 1
int ans = 1;
// 循环叠加,使用 lastIndexOf 来代替 indexOf 更快速
while (sb.lastIndexOf(B) == -1) {
// 字符串长度超过 maxLen 时,说明无法通过叠加字符串 A,使得新字符串包含 B
if (sb.length() > maxLen) {
return -1;
}
sb.append(A);
ans++;
}
return ans;
}
四、执行用时
五、部分测试用例
public static void main(String[] args) {
String A = "abcd", B = "cdabcdab"; // output: 3
int result = repeatedStringMatch(A, B);
System.out.println(result);
}