KMP算法:
- 改进的字符串匹配算法
首先学习一下创建next – 部分匹配值
摘抄该文章
http://www.ruanyifeng.com/blog/2013/05/Knuth%E2%80%93Morris%E2%80%93Pratt_algorithm.html
具体例子:
摘抄该文章:
https://blog.csdn.net/CFH1021/article/details/115182743
代码实现过程
摘抄 : 牛客 子夜降晴空大佬
string s = "ababab";
next[0] = -1; //第0位设置成-1表示需要右移被匹配字符指针
for(int pre = -1, cur = 0; cur < S.size();) { //用双指针在模板内部进行匹配
if(pre == -1 || S[pre] == S[cur]) { //当从头开始匹配或者双指针指向字符相同时
pre++; //左指针右移
cur++; //当前指针右移
next[cur] = pre; //更新该下标的next值为,(不含该下标之前字符串)最长相同前缀的后一位(即相同字符串长度)
}
else pre = next[pre]; //字符不相同时左指针更新为,(不含该字符之前的字符串)最长相同前缀的后一位(若该字符为S[0]则值为-1表示需要右移cur)
}
了解了部分匹配值之后我们来寻找相同的字符串
摘抄
http://www.ruanyifeng.com/blog/2013/05/Knuth%E2%80%93Morris%E2%80%93Pratt_algorithm.html