题目如下
数据范围
题目的意思是问我们是否可以在n个a中找到b,且问你n是多少。
首先我们可以枚举n,那么n的上限在哪?
是不是当i - len(b) > len(a)时该停下来。(因为这个时候相当于开始把第(n + 1的a[0]和b[0]做比较?)
即开始循环,但是显然我们不需要这样的循环。
换句话说如果在进入循环前没找到b就代表我们找不到一个n使得a中能找到b。
通过代码
cpp
class Solution {
public:
int repeatedStringMatch(string a, string b) {
int n = a.size();
int m = b.size();
vector<int> next(m,0);
for(int i = 1,j = 0;i < m;i++){
while(j > 0 && b[i] != b[i])j = next[j - 1];
if(b[i] == b[j])j++;
next[i] = j;
}
for(int i = 0,j = 0;i - m < n;i++){
while(j > 0 && b[j] != a[i % n])j = next[j - 1];
if(a[i % n] == b[j])j++;
if(j == m)return i/n + 1;
}
return -1;
}
};//思路中的写法 good!
