生成 Pattern 的字符串的 next 数组,长度为 m+1
点击查看代码
void getNext(vector<int>& next, string& pattern) {
int n = pattern.size();
for (int j = 0, k = -1; j < n; ) {
if (k == -1 || pattern[j] == pattern[k]) next[++j] = ++k;
else k = next[k];
}
return;
}
将 字符串 cur 与 模板串 s 进行匹配
点击查看代码
for (int i = 0, j = 0; i < n;) {
if (j == -1 || cur[i] == s[j]) {
++i;
++j;
if (j == m) {
// 匹配完成,进入下一次匹配
j = next[m];
return true;
}
} else {
j = next[j];
}
}