标签:color mat out cout 相同 lib namespace ace getch
//KMP //求匹配子串 #include<iostream> #include<cstdio> #include<cstring> #include<cstdlib> #include<cmath> #include<algorithm> using namespace std; int lena,lenb,next[1000001];//next[a]存放在a长度的子字符串中前后缀相同最长的长度 char a[1000001],b[1000001]; void getnxt() { int num=0; for(int i=2;i<=lenb;i++) { while(num&&b[num+1]!=b[i]) num=next[num]; if(b[num+1]==b[i]) num++; next[i]=num; } } void KMP() { int num=0; for(int i=1;i<=lena;i++) { while(num&&b[num+1]!=a[i]) num=next[num]; if(b[num+1]==a[i]) num++; if(num==lenb) cout<<i-lenb+1<<endl; } } void do_something() { cin>>a+1; getchar(); cin>>b+1; lena=strlen(a+1); lenb=strlen(b+1); getnxt(); KMP(); for(int i=1;i<=lenb;i++) cout<<next[i]<<" "; return; } int main() { do_something(); return 0; }
标签:color mat out cout 相同 lib namespace ace getch
原文地址:https://www.cnblogs.com/water-radish/p/9280631.html