KMP hdu-2594 Simpsons’ Hidden Talents
2013-05-22 13:48
399 查看
题目链接:
http://acm.hdu.edu.cn/showproblem.php?pid=2594
题目意思:
给两个串,求出第一个串的前缀是第二个串的后缀的最大长度。
解题思路:
先求出第一个串的next数组,然后来匹配第二个串。
注意一种特殊情况,当第二个串是第一个串的前缀子串时,next数组不能包括自己本身。单独处理。
代码:
http://acm.hdu.edu.cn/showproblem.php?pid=2594
题目意思:
给两个串,求出第一个串的前缀是第二个串的后缀的最大长度。
解题思路:
先求出第一个串的next数组,然后来匹配第二个串。
注意一种特殊情况,当第二个串是第一个串的前缀子串时,next数组不能包括自己本身。单独处理。
代码:
#include<iostream> #include<cmath> #include<cstdio> #include<cstdlib> #include<string> #include<cstring> #include<algorithm> #include<vector> #include<map> #include<stack> #include<list> #include<queue> #define eps 1e-6 #define INF (1<<30) #define PI acos(-1.0) using namespace std; #define Maxn 55000 char save1[Maxn],save2[Maxn]; int next[Maxn],n1,n2; void getnext1() { int j=0; next[1]=0; for(int i=2;i<=n1;i++) { while(j>0&&save1[j+1]!=save1[i]) j=next[j]; if(save1[j+1]==save1[i]) j++; next[i]=j; } } int getnext2() { int j=0; next[1]=0; for(int i=2;i<=n2;i++) { while(j>0&&save1[j+1]!=save2[i]) j=next[j]; if(save1[j+1]==save2[i]) j++; if(i==n2) //直接返回最后的那个就行了 return j; //next[i]=j; //不能以第二串来求next //printf("%d %d\n",i,next[i]); } } int main() { while(scanf("%s%s",save1+1,save2+1)!=EOF) { save1[0]=save2[0]='k'; n1=strlen(save1)-1,n2=strlen(save2)-1; if(n2<=n1) //当第二个串是第一个串的子串时单独处理 {` if(strncmp(save1+1,save2+1,n2)==0) { printf("%s %d\n",save2+1,n2); continue; } } getnext1(); int ans=getnext2(); if(ans) { save1[ans+1]='\0'; printf("%s %d\n",save1+1,ans); } else puts("0"); } return 0; }
相关文章推荐
- HDU 2594 Simpsons’ Hidden Talents(KMP)
- HDU 2594 Simpsons’ Hidden Talents(kmp)
- hdu 2594 Simpsons’ Hidden Talents 【KMP】
- HDU 2594 Simpsons’ Hidden Talents(KMP)
- HDU 2594(Simpsons’ Hidden Talents)字符串匹配-KMP
- HDU 2594Simpsons’ Hidden Talents(KMP运用)
- HDU 2594 Simpsons’ Hidden Talents【KMP】
- |Hdu 2594|KMP|Simpsons’ Hidden Talents
- hdu 2594 Simpsons’ Hidden Talents 【KMP】
- HDU 2594 Simpsons’ Hidden Talents (KMP)
- 【KMP】 HDU 2594 Simpsons’ Hidden Talents
- HDU 2594--Simpsons’ Hidden Talents【KMP】
- HDU 2594 Simpsons’ Hidden Talents (KMP)
- HDU 2594 Simpsons’ Hidden Talents (kmp)
- HDU 2594 Simpsons’ Hidden Talents (KMP)
- HDU 2594 Simpsons’Hidden Talents(KMP)
- HDU 2594 Simpsons’ Hidden Talents(裸KMP)
- hdu 2594 Simpsons’ Hidden Talents (KMP求第一串前缀和第二串后缀最大值)
- HDU 2594 Simpsons’ Hidden Talents(字符串-KMP)
- HDU 2594 - Simpsons’ Hidden Talents(扩展kmp模板)