题目1841 Find the Shortest Common Superstring(KMP)
来源:互联网 发布:淘宝相似图片搜索 编辑:程序博客网 时间:2024/05/16 09:40
Find the Shortest Common Superstring
Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 65535/65535 K (Java/Others)Total Submission(s): 1629 Accepted Submission(s): 437
Problem Description
The shortest common superstring of 2 strings S1 and S2 is a string S with the minimum number of characters which contains both S1 and S2 as a sequence of consecutive characters. For instance, the shortest common superstring of “alba” and “bacau” is “albacau”.
Given two strings composed of lowercase English characters, find the length of their shortest common superstring.
Given two strings composed of lowercase English characters, find the length of their shortest common superstring.
Input
The first line of input contains an integer number T, representing the number of test cases to follow. Each test case consists of 2 lines. The first of these lines contains the string S1 and the second line contains the string S2. Both of these strings contain at least 1 and at most 1.000.000 characters.
Output
For each of the T test cases, in the order given in the input, print one line containing the length of the shortest common superstring.
Sample Input
2albabacauresitamures
Sample Output
78
Author
Mugurel Ionut Andreica
Source
Politehnica University of Bucharest Local Team Contest 2007
Recommend
lcy | We have carefully selected several similar problems for you: 1801 1823 1427 1839 1582
应该说很水的,就有考虑一下,一个串包含另一个串的情况就好了
ac代码
#include<stdio.h>#include<string.h>int next[1000100];char ans[2000100],s1[1000100],s2[1000100];void getnext(char *s,int len){next[0]=-1;int i,j;i=0;j=-1;while(i<=len){if(j==-1||s[i]==s[j]){i++;j++;next[i]=j;}elsej=next[j];}}int kmp(char *a,char *b,int len1,int len2){//memset(next,0,sizeof(next));getnext(b,len2);int i,j;i=j=0;while(i<len1){if(j==-1||a[i]==b[j]){i++;j++;}elsej=next[j];if(j==len2)return len2;}if(i==len1)return j;return 0;}int main(){int t;scanf("%d",&t);while(t--){scanf("%s%s",s1,s2);int len1=strlen(s1);int len2=strlen(s2);int x=kmp(s1,s2,len1,len2);int y=kmp(s2,s1,len2,len1);int ans;if(x>y){ans=len1+len2-x;}else{ans=len1+len2-y;}printf("%d\n",ans);}}
1 0
- 题目1841 Find the Shortest Common Superstring(KMP)
- HDOJ 1841 Find the Shortest Common Superstring(KMP)
- HDU 1841 Find the Shortest Common Superstring(KMP)
- hdu1841 Find the Shortest Common Superstring-----KMP
- HDU 1841 Find the Shortest Common Superstring KMP
- 文章标题 HDU 1841:Find the Shortest Common Superstring(KMP)
- Find the Shortest Common Superstring(hdu1841,KMP)
- HDU 1841 Find the Shortest Common Superstring(KMP灵活运用)
- hdu 1841 Find the Shortest Common Superstring
- HDU 1841: Find the Shortest Common Superstring
- HDU 1841Find the Shortest Common Superstring
- HDU 1841Find the Shortest Common Superstring
- hdu1841 Find the Shortest Common Superstring -- (KMP 前缀,后缀处理)
- hdu1841 Find the Shortest Common Superstring 两遍KMP
- hdu1841 Find the Shortest Common Superstring
- HDU 1841 Find the Shortest Common Superstring(KMP 理解 应用 求组合串的next值判断是否匹配)
- HDU1841 Find the Shortest Common Superstring (KMP两字符串的首尾连接)
- hdoj1841Find the Shortest Common Superstring【扩展KMP模板】
- 通过代码快速理解Java代码块
- 使用Thrift RPC编写程序
- Jedis使用总结【pipeline】【分布式的id生成器】【分布式锁【watch】【multi】】【redis分布式】
- 最新关于try ,catch,throw的使用小结
- 【SDOI2009】【BZOJ1875】HH去散步
- 题目1841 Find the Shortest Common Superstring(KMP)
- LeetCode题解:Remove Duplicates from Sorted List
- Codeforces 558E. A Simple Task (线段树+计数排序)
- OGG-01705 input trail file './dirdat/fc075295' is greater than the size of the file
- 从零开始学Java之出入门卫管理(二)
- C# 接口的隐式与显示实现
- C#(winform)新建项目后,调试异常终止且无错误提示问题解决办法
- hdu1166-敌兵布阵(线段树)
- hdu5047 Sawtooth(推导+java大数)