【codevs1204】寻找子串位置 kmp

xiaoxiao2021-02-28  33

原题

//codevs1204 寻找子串位置 #include<iostream> #include<string> #include<cstring> #include<cstdio> using namespace std; string a,b; int n,m; int fail[101000]; void getfail() { fail[0]=0;fail[1]=0; for (int i=1;i<m;i++) { int j=fail[i]; while(j&&b[i]!=b[j]) j=fail[j]; fail[i+1]=b[i]==b[j]?j+1:0; } } int main() { cin>>a>>b; n=a.length();m=b.length(); getfail(); int j=0; for (int i=0;i<n;i++) { while(j&&a[i]!=b[j]) j=fail[j]; if (a[i]==b[j]) j++; if (j==m) printf("%d\n",i-j+2); } return 0; }

 

转载请注明原文地址: https://www.6miu.com/read-2623320.html

最新回复(0)