[KMP-next数组特性]HDU 2594 Simpsons’ Hidden Talents
2012-06-27 17:37
519 查看
如果不了解next数组前缀后缀特性的请看我以前写的一道题:/article/8729049.html
传送门:http://acm.hdu.edu.cn/showproblem.php?pid=2594
题目大意:给定字符串s1,s2要求出s1的最长前缀,同时还是s2的最长后缀,输出该字符串和其长度.
解题思路:利用前缀后缀特性,把两个字符串接起来,按照前面那题的方法,来求前缀后缀子串,注意其终止条件的变化,这里前缀后缀子串的长度必须小于s1,s2长度的最小值。
代码:
传送门:http://acm.hdu.edu.cn/showproblem.php?pid=2594
题目大意:给定字符串s1,s2要求出s1的最长前缀,同时还是s2的最长后缀,输出该字符串和其长度.
解题思路:利用前缀后缀特性,把两个字符串接起来,按照前面那题的方法,来求前缀后缀子串,注意其终止条件的变化,这里前缀后缀子串的长度必须小于s1,s2长度的最小值。
代码:
#include<iostream> using namespace std; const int MAXN = 111111; int next[MAXN],Min; char s[MAXN],t[MAXN]; void makenext(){ int M = strlen(s),i=0,j=-1;next[0]=-1; while(i<=M){ if(s[i]==s[j]||j==-1)next[++i]=++j; else j = next[j]; } } void solve(){ int i = strlen(s); i = next[i]; while(i>Min&&i>0){ i = next[i]; } s[i] = 0; if(i!=0) printf("%s %d\n",s,i); else printf("%d\n",i); } int main(){ while(scanf("%s%s",s,t)!=EOF){ Min = min(strlen(s),strlen(t)); strcat(s,t); makenext(); solve(); } return 0; }
相关文章推荐
- HDU 2594 Simpsons’ Hidden Talents(KMP的Next数组应用)
- HDU 2594 Simpsons’ Hidden Talents(KMP,next数组的应用)
- HDU 2594 Simpsons’ Hidden Talents (KMP的F数组应用)
- HDU3746——Simpsons’ Hidden Talents(KMP中next数组的应用)
- HDU 2594 Simpsons’ Hidden Talents kmp next数组问题
- hdu 2594 Simpsons’ Hidden Talents(两个串的next数组)
- 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求第一串前缀和第二串后缀最大值)
- Simpsons’ Hidden Talents (HDU_2594) KMP
- HDU 2594 (简单KMP) 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】