P1803 字符串匹配
作者:互联网
题目描述
给定一个字符串AA 和一个字符串BB,求BB 在AA 中的出现次数。AA 和BB 中的字符均为英语大写字母或小写字母。
AA 中不同位置出现的BB 可重叠。
输入描述
输入共两行,分别是字符串AA 和字符串BB。
输出描述
输出一个整数,表示BB 在AA 中的出现次数。
样例输入
Copy to Clipboard
zyzyzyz
zyz
样例输出
Copy to Clipboard
3
数据范围
保证所有字符串长度\leq 10^6≤106
#include<iostream> #include<cstring> #include<algorithm> #include<cmath> #include<stack> using namespace std; const int maxn=1e6+10; string s,p; int next1[maxn]; void getnext1(string p){ next1[0]=-1; int j=0,k=-1; while (j<p.length()- 1){ if (k==-1||p[j]==p[k]){ j++; k++; next1[j] = k; } else k=next1[k]; } } int kmp(string s,string p){ getnext1(p); int i=0,j=0; int res=0; while(i<s.length()){ if(j==-1||s[i]==p[j]){ i++; j++; } else j=next1[j]; if(j==p.length()){ res++; i--; j--; j=next1[j]; } } return res; } int main(){ cin>>s>>p; cout<<kmp(s, p)<<endl; return 0; }
标签:AA,匹配,BB,int,Clipboard,P1803,字符串,include 来源: https://www.cnblogs.com/ACM-YYDS/p/16367968.html