- Next数组的含义是:next[i]分别代表长度为i的字符串的前缀与后缀的最大公共长度
- 获得next数组
vector<int> getNext(string str)
{
int len = str.length();
vector<int> next(len + 1);
if (len == 0)
return next;
next[0] = next[1] = 0;
int j = 0;
for (int i = 1; i < len; ++i){
while (j > 0 && str[i] != str[j])
j = next[j];
if (str[j] == str[i])
j++;
next[i + 1] = j;
}
return next;
}
int strMatch(string origin, string sub)
{
vector<int> next = getNext(sub);
int j = 0;
int len = origin.length();
int subLen = sub.length();
for (int i = 0; i < len; ++i){
while (j > 0 && origin[i] != sub[j])
j = next[j];
if (sub[j] == origin[i])
j++;
if (j == subLen)
return i - j + 1;
}
}