KMP算法
Posted lhlccc
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了KMP算法相关的知识,希望对你有一定的参考价值。
重点:理解next数组的含义,减少循环的时间。
#include <bits/stdc++.h> using namespace std; const int N=10005; int next[1005]; //优化过后的next 数组求法 void GetNextval(string p) int pLen = p.length(); next[0] = -1; int k = -1; int j = 0; while (j < pLen - 1) if (k == -1 || p[j] == p[k]) ++j; ++k; if (p[j] != p[k]) next[j] = k; //之前只有这一行 else next[j] = next[k]; else k = next[k]; int kmp(string s,string p) int i = 0; int j = 0; int sLen = s.length(); int pLen = p.length(); while (i < sLen && j < pLen) if (j == -1 || s[i] == p[j]) i++; j++; else j = next[j]; if (j == pLen) return i - j; else return -1; int main() string s1,s2; cin>>s1>>s2; GetNextval(s2); cout<<kmp(s1,s2)<<endl;
以上是关于KMP算法的主要内容,如果未能解决你的问题,请参考以下文章