686.重复叠加字符串匹配
题目描述
思路
上下界性质
要想覆盖b字符串,至少需要b/a向上取整个a字符串,至多需要b/a向上取整+1个a字符串。
Python实现
class Solution:
def repeatedStringMatch(self, a: str, b: str) -> int:
return l if (a * (l:=ceil(len(b)/len(a)))).find(b) != -1 else l + 1 if (a * (l + 1)).find(b) != -1 else -1
Java实现
class Solution {
public int repeatedStringMatch(String a, String b) {
int l = (b.length() + a.length() - 1) / a.length();
StringBuilder sb = new StringBuilder();
for (int i = 0; i < l; i++) {
sb.append(a);
}
for (int i = 0; i <= sb.length() - b.length(); i++) {
if (sb.substring(i, i + b.length()).equals(b)) {
return l;
}
}
sb.append(a);
for (int i = a.length()*l - b.length() + 1; i <= sb.length() - b.length(); i++) {
if (sb.substring(i, i + b.length()).equals(b)) {
return l + 1;
}
}
return -1;
}
}