hdu 2203 亲和串
2013-08-10 00:17
183 查看
把T串扩展成两倍 然后KMP 注意T的长度要大于P的长度
#include <iostream> #include <cstdio> #include <cstring> #include <algorithm> using namespace std; char P[400005]; char T[400005]; int f[400005]; void getfail() { int m=strlen(P); f[0]=0;f[1]=0; for(int i=1;i<m;i++) { int j=f[i]; while(j&&P[i]!=P[j])j=f[j]; f[i+1]=P[i]==P[j]?j+1:0; } } bool find() { int n=strlen(T); int m=strlen(P); getfail(); int j=0; for(int i=0;i<n;i++) { while(j&&P[j]!=T[i])j=f[j]; if(P[j]==T[i])j++; if(j==m){/*printf("%d\n",i-m+1+1);*/return true;} } return false; } int main() { while(scanf("%s%s",T,P)!=EOF) { int len=strlen(T); for(int i=len;i<len*2;i++) { T[i]=T[i-len]; } if(find() && strlen(T)/2>=strlen(P))printf("yes\n"); else printf("no\n"); } return 0; }
相关文章推荐
- HDU 2203 亲和串 (KMP)
- hdu 2203 亲和串(KMP|strstr())
- HDU-亲和串-2203
- hdu2203之KMP入门
- HDU 2203 strstr()函数应用
- hdu 2203 亲和串
- hdu 2203
- [hdu][2203][亲和串]
- 【KMP】hdu 1686 Oulipo(外:hdu 2203 亲和串)
- hdu 2203 亲和串(kmp)
- hdu2203——亲和串
- HDU 2203 亲和串 KMP
- HDU 2203 循环串匹配
- hdu 2203 亲和串
- hdu 2203 亲和串(求一个串轮回后是否包含别的一个串)
- 【HDU】2203 亲和串 KMP
- 寒假前刷题(3)kmp系列 hdu 2203
- hdu 2203(KMP)
- hdu 2203 亲和串
- hdu 2203 亲和串