void GetNext(string t) {
int tlen = t.size();
//init
int j = 0;
int k = -1;
Next[0] = -1;
while(j < tlen - 1) {
if(k == -1 || t[k] == t[j]) {
Next[++j] = Next[++k];
}
else {
k = Next[k];
}
}
}
//ts 主串,ps 模式串
int KMP(string ts, string ps) {
int i = 0;//ts pos
int j = 0;//ps pos
GetNext(ps);
while(i < ts.length() && j < ps.length()) {
if(j == -1 || t[i] == p[j]) {
i++;
j++;
} else {
j = Next[j];
}
}
if(j == ps.length()) {
return i - j;
}
else {
return -1;
}
}
KMP 算法代码模板
最新推荐文章于 2023-03-04 10:40:49 发布