Title:Repeated String Match 686
Difficulty:Easy
原题leetcode地址: https://leetcode.com/problems/repeated-string-match/
1. 见代码注释
时间复杂度:O(n),一层一次for循环。
空间复杂度:O(1),没有申请额外空间。
/**
* 首先A拼接后的长度需要大于B的长度,有下面两种情况:
* 1、A=“abc”,B=“abcab”
* 2、A=“bca”,B=“abcab”
* @param A
* @param B
* @return
*/
public static int repeatedStringMatch(String A, String B) {
int count = 1;
String s = A;
for (; s.length() < B.length(); count++) {
s += A;
}
if (s.indexOf(B) >= 0) {
return count;
}
if ((s + A).indexOf(B) >= 0) {
return count + 1;
}
return -1;
}
/**
* 同上述的方法大致一样
* @param A
* @param B
* @return
*/
public static int repeatedStringMatch1(String A, String B) {
StringBuilder sb = new StringBuilder(A);
while (sb.length() <= B.length() + A.length()) {
if (sb.indexOf(B) > -1) {
return sb.length() / A.length();
}
sb.append(A);
}
return sb.indexOf(B) > -1 ? sb.length() / A.length() : -1;
}