学习KMP算法,给出主串和模式串,求模式串在主串的位置
算法框架如下,仅供参考
标签:ios 参考 ext 应用 for end str iostream --
学习KMP算法,给出主串和模式串,求模式串在主串的位置
算法框架如下,仅供参考
第一个输入t,表示有t个实例
第二行输入第1个实例的主串,第三行输入第1个实例的模式串
以此类推
第一行输出第1个实例的模式串的next值
第二行输出第1个实例的匹配位置,位置从1开始计算,如果匹配成功输出位置,匹配失败输出0
以此类推
为什么next值和课本的不一样???
#include<iostream> #include<string> using namespace std; int *getnext(string p) { int j=0,k=-1; int *next=new int[p.size()]; next[0]=-1; while(j<(int)p.size()-1) { if(k==-1||p[j]==p[k]) { j++; k++; next[j]=k; } else k=next[k]; } return next; } int KMP(string s,string p) { int i=0,j=0; int *next=getnext(p); while(i<(int)s.size()&&j<(int)p.size()) { if(j==-1||s[i]==p[j]) { i++; j++; } else j=next[j]; } if(j==(int)p.size()) return i-j+1; return 0; } int main() { int T; cin>>T; while(T--) { string s,p; cin>>s>>p; int *next=getnext(p); for(int i=0;i<(int)p.size();i++) { cout<<next[i]<<" "; } cout<<endl; cout<<KMP(s,p)<<endl; } return 0; }
标签:ios 参考 ext 应用 for end str iostream --
原文地址:https://www.cnblogs.com/SZU-DS-wys/p/12180739.html