KMP算法c++实现
2017-03-16 21:44
357 查看
一、原理看下面视频
http://baidu.ku6.com/watch/1196605033445674118.html?page=videoMultiNeed
二、c++代码:
next数组的测试用例
s字符串: aabaabaaa
next数组:010123452
s字符串:abcaby
next数组:000120
http://baidu.ku6.com/watch/1196605033445674118.html?page=videoMultiNeed
二、c++代码:
#include<iostream> #include<cmath> #include<vector> #include<cstring> using namespace std; void get_next(string s1, int next[]){ int len = s1.size(); next[0] = 0; int i=1; int j=0; while(i<len){ if(s1[i] == s1[j]){ next[i] = j+1; i++; j++; }else{ while(j>0 && s1[i]!=s1[j]){ j = next[j-1]; } if(s1[i] == s1[j]){ next[i] = j+1; i++; j++; }else if(j == 0 && s1[i] != s1[j]){ next[i] = 0; i++; } } } } bool kmpAlgorithm(string s1, string s2, int next[]){ //s1是主串,求s2是否能在s1中模糊匹配出来 int len1 = s1.size(); int len2 = s2.size(); //next的长度和s2的长度是一样的 int j=0; //i用来遍历s1,j用来遍历s2 for(int i=0;i<len1;i++){ while(j>0 && s1[i]!= s2[j]){ j = next[j]; } if(s1[i] == s2[j]){ j++; } if(j == len2){ return true; } } return false; } int main(){ string s1,s2; while(cin>>s1>>s2){ //s1是主串,s2是要判断的串 int *next = new int[s2.size()+1]; get_next(s2, next); cout<<s1<<endl; cout<<s2<<endl; cout<<kmpAlgorithm(s1, s2, next)<<endl; } return 0; }
next数组的测试用例
s字符串: aabaabaaa
next数组:010123452
s字符串:abcaby
next数组:000120
相关文章推荐
- KMP算法的C++实现代码
- 数据结构_串_串的模式匹配_KMP算法_C++实现
- KMP算法 C++实现
- KMP算法匹配原理以及C++实现
- C++实现KMP算法
- KMP算法C++实现
- 逐步理解KMP算法C++完整实现
- kmp算法c++代码实现
- KMP算法C++实现
- KMP算法的一个C++实现
- 数据结构_串_用链表做存储结构实现KMP算法_C++实现
- 算法串匹配C++实现字符串匹配的KMP算法
- C++实现字符串匹配的KMP算法
- KMP算法C++ 实现
- kmp算法C++源码实现
- KMP算法 (C++实现)
- C++实现的KMP算法
- KMP算法 (C++实现)
- KMP算法 C++实现
- KMP算法及c++实现