HDU2594 Simpsons’ Hidden Talents KMP
来源:互联网 发布:西部网络达人秀开场舞 编辑:程序博客网 时间:2024/05/19 02:02
题目大意:给出两个字符串s1,s2,长度小于50000,让找出s1最长的前缀,同时该前缀又是s2的后缀,如果存在,输出该前缀和前缀的长度。
分析:我们把s1和s2合成一个字符串,求出该模式串的next数组,如果next[ len ]不为0(len为合成的字符串的长度),则即为所求。
实现代码如下:
#include <cstdio>#include <iostream>#include <cstring>#include <algorithm>using namespace std;#define maxn 50005char s1[2*maxn],s2[maxn];int nex[2*maxn];void get_nex(char s[])//获得模式串s的next数组{ int i=0, j=-1; nex[0]=-1; int len=strlen(s); while(i<len) { if(j==-1||s[i]==s[j]) { i++; j++; nex[i]=j; } else j=nex[j]; }}void solve(){ int len1=strlen(s1); int len2=strlen(s2); //strncpy(s1+len1,s2,len2); strcat(s1,s2); get_nex(s1); int len=len1+len2; while(nex[len]>len1||nex[len]>len2) //保证该前缀(后缀)长度小于s1,s2 len=nex[len]; len=nex[len]; for(int i=0;i<len;i++) printf("%c",s1[i]); if(len) printf(" "); printf("%d\n",len);}int main(){ while(gets(s1)) { gets(s2); solve(); } return 0;}
0 0
- 【KMP】 hdu2594 Simpsons’ Hidden Talents
- hdu2594 Simpsons’ Hidden Talents kmp
- HDU2594 Simpsons’ Hidden Talents 【KMP】
- hdu2594 Simpsons’ Hidden Talents(KMP)
- HDU2594 Simpsons’ Hidden Talents【KMP】
- HDU2594 Simpsons’ Hidden Talents KMP
- HDU2594 Simpsons’ Hidden Talents KMP
- Simpsons' Hidden Talents hdu2594 kmp
- hdu2594 Simpsons’ Hidden Talents (kmp)
- 【hdu2594】Simpsons’ Hidden Talents——KMP
- HDU2594 Simpsons’ Hidden Talents(KMP)
- HDU2594:Simpsons’ Hidden Talents
- hdu2594-Simpsons’ Hidden Talents
- hdu2594 Simpsons’ Hidden Talents
- hdu2594 Simpsons’ Hidden Talents
- HDU2594 Simpsons’ Hidden Talents
- HDU2594 Simpsons’ Hidden Talents
- HDU2594-Simpsons’ Hidden Talents
- 高效程序员的45个习惯之敏捷反馈
- leveldb之cache
- Struts2.3.14分析-初始化1
- Linked List Cycle
- java instanceof关键字
- HDU2594 Simpsons’ Hidden Talents KMP
- 直接插入排序
- 系统调用处理 暨 错误的包装函数
- MyEclipse集成svn的简单方法
- 感知机不能表示“异或”
- 为甚么 国企做互联网总做不起来?
- 更新一下智能插座研发进度
- 黑马程序员_java学习日记num15
- JavaScript高级程序设计,对书中一些不熟悉的地方做得笔记