Repeated String Match
Question:
思路
这个题的思路有一个trick 就是 额外加两次copy那里需要特别理解一下.
首先我们知道, 如果想构建出b是a 的substring, 那么至少a.length >= b.length.
然后呢, 我们就首先会add b.length/a.length + 1 个 copy.
因为code除法都是向下取整, 所以 + 1可以保证a.length 至少比 b.length 长.
至于为什么要再加一次copy 呢。
是因为, 如果说B[0] 是 A[A.length -1]的话, 那么A.length 刚刚比 B长一点儿, 是不够用的. 不能保证B是substring of A 并且还能检测到。
所以我们要额外加一次copy,这样就能保证不漏.
举个例子:
Suppose A = aaaaab and B = ba
Now S = A (1 time) is already >= B.size()
So we do not need to append S with A , we will directly check if “ba” is in the S or not which is not …
So we will append S one last time with A , Now S becomes , S = aaaaabaaaaab , again searching for B in the S will get you with solution …
class Solution {
public int repeatedStringMatch(String a, String b) {
String ans = a;
for(int i = 0;i < b.length()/a.length() + 2; ++i, ans += a){
if(ans.contains(b)) {
return i+1;
}
}
return -1;
}
}