686. Repeated String Match
Easy
Given two strings A and B, find the minimum number of times A has to be repeated such that B is a substring of it. If no such solution, return -1.
For example, with A = “abcd” and B = “cdabcdab”.
Return 3, because by repeating A three times (“abcdabcdabcd”), B is a substring of it; and B is not a substring of A repeated two times (“abcdabcd”).
判断当 A 重复一定次数之后,B 能否成为其子串,如果是,返回重复次数,不是返回 -1。
既然 B 要是 A 的子串,那么 A 的长度一定的 大于等于 B,并且当 A 长度已经大于等于 B 的长度,还没找到,那么再怎么重复,都是不可能找到的。
- 先让 A 重复次数 大于等于 B 的长度
- 再判断是否找到,找到则返回,如果此时还不包含,那么再加一次A
- 再判断是否包含,并返回结果
Java
class Solution {
public int repeatedStringMatch(String A, String B) {
int len_a = A.length();
int len_b = B.length();
// StringBuffer res = new StringBuffer(A);
String res = A;
int cnt = 1;
while(res.length() < len_b){
res += A;
cnt += 1;
}
if(res.contains(B)){
return cnt;
}
res += A;
if(res.contains(B)){
return cnt+1;
}
return -1;
// while(res.indexOf(B) == -1){
// if(res.length() - len_a > len_b){
// return -1;
// }
// res.append(A);
// cnt += 1;
// }
// return cnt;
}
}
Python
class Solution:
def repeatedStringMatch(self, A: str, B: str) -> int:
len_a, len_b = len(A), len(B)
res = A
cnt = 1
while len(res) < len_b:
res += A
cnt += 1
if res.find(B) != -1:
return cnt
res += A
if res.find(B) != -1:
return cnt+1
return -1