CF 126B Password (KMP,利用next数组)
2012-11-03 00:06
357 查看
链接:
http://www.codeforces.com/problemset/problem/126/B
题目大意:
给定一个字符串S, 找到一个子串t,使得这个子串既和S的前缀相同,又和S的后缀相同,但是t不能是S的前缀或后缀。
分析与总结:
利用和理解next数组的好题,首先可以找到所有与前缀相同的后缀的长度, 另len=|S|, 那么next[len] 就是最长的与前缀相同的后缀。
然后利用next数组,可以求出所有长度的后缀与前缀相同的长度,用一个vis数组标记。
之后只需要遍历一遍next数组(非开头与结尾),找到最长的长度即可。
代码:
—— 生命的意义,在于赋予它意义士。
原创 http://blog.csdn.net/shuangde800 , By
D_Double (转载请标明)
http://www.codeforces.com/problemset/problem/126/B
题目大意:
给定一个字符串S, 找到一个子串t,使得这个子串既和S的前缀相同,又和S的后缀相同,但是t不能是S的前缀或后缀。
分析与总结:
利用和理解next数组的好题,首先可以找到所有与前缀相同的后缀的长度, 另len=|S|, 那么next[len] 就是最长的与前缀相同的后缀。
然后利用next数组,可以求出所有长度的后缀与前缀相同的长度,用一个vis数组标记。
之后只需要遍历一遍next数组(非开头与结尾),找到最长的长度即可。
代码:
#include<iostream> #include<cstdio> #include<cstring> using namespace std; const int MAXN = 1000005; char S[MAXN]; int f[MAXN]; bool vis[MAXN]; void getNext(char* p,int* f){ int m=strlen(p); f[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]?1+j:0; } } int main(){ while(scanf("%s",S)!=EOF){ getNext(S,f); int len=strlen(S); int maxx=f[len]; if(maxx==0){ puts("Just a legend"); continue; } memset(vis, 0, sizeof(vis)); vis[maxx]=true; int j=maxx; while(j){ vis[f[j]]=true; // 把所有同时是前缀和后缀的长度标记 j=f[j]; } bool ok=false; int ans=0,pos=0; for(int i=2; i<len; ++i){ if(vis[f[i]] && f[i]>ans){ ok=true; ans=f[i]; } } if(!ok){ puts("Just a legend"); } else{ puts(S+len-ans); } } return 0; }
—— 生命的意义,在于赋予它意义士。
原创 http://blog.csdn.net/shuangde800 , By
D_Double (转载请标明)
相关文章推荐
- HDU Cyclic Nacklace (KMP-next数组的利用)
- hud3336 kmp之对next数组的利用
- KMP的妙用(利用next数组寻找字符串的循环节)
- POJ 2752+KMP+利用next数组性质求出所有相同的前缀和后缀
- 利用kmp里的next数组的一道题
- LA 3026 && POJ 1961 Period (利用kmp中的next数组找最小的循环节 )
- HDU 3746 Cyclic Nacklace 利用 KMP的next数组求循环节
- hdu1358 KMP-next数组的应用
- 关于 KMP next 数组的应用
- Seek the Name, Seek the Fame(KMP之next数组应用)
- poj2406-kmp的next数组的简单应用(2)
- 【经典算法】——KMP,深入讲解next数组的求解
- POJ 1961 Period KMP(next数组应用)
- POJ2752 Seek the Name, Seek the Fame KMP-next数组的应用
- 两道水kmp-求next数组
- nyoj 2340 最小循环节(KMP之next数组的应用)
- hdu 1358 Period(KMP之next数组)
- hdu 4763 Theme Section (kmp, Next数组的应用)
- KMP之Next[]数组深入理解
- Period(kmp中next数组的运用)