首页 > 代码库 > KMP算法模板
KMP算法模板
判断一个字符串在另一字符串中是否出现过
1 #include<cstdio> 2 #include<cstring> 3 #include<algorithm> 4 #include <iostream> 5 #include <string> 6 using namespace std; 7 int f[ 15000]; 8 void getfill(string s) 9 {10 memset(f,0,sizeof(f)); //根据其前一个字母得到11 for(int i=1;i<s.size();i++)12 {13 int j=f[i];14 while(j && s[i]!=s[j])15 j=f[j];16 f[i+1]=(s[i]==s[j])?j+1:0;17 }18 }19 int find(string a,string s)20 {21 int ans=0;22 getfill(s);int j=0;23 for(int i=0;i<a.size();i++)24 {25 while(j && a[i]!=s[j])26 j=f[j];27 if(a[i]==s[j])28 j++;29 if(j==s.size()){30 ans++;31 }32 }33 return ans;34 }35 int main()36 {37 string s,a;38 int T;39 scanf("%d",&T);40 while(T--)41 {42 getchar();43 cin>>s>>a;44 int ans=find(a,s);45 printf("%d\n",ans);46 }47 return 0;48 }
·本题为:求一个模式串在字符串中的出现次数
·第一个为子串 第二个为长串
KMP算法模板
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。