HUST 1010-The Minimum Length-KMP
2015-11-03 16:48
423 查看
[align=center]The Minimum Length[/align]
Time Limit:1000MS Memory Limit:131072KB 64bit IO Format:%lld
& %llu
SubmitStatus
Description
There is a string A. The length of A is less than 1,000,000. I rewrite it again and again. Then I got a new string: AAAAAA...... Now I cut it from two different position and get a new string B. Then, give you the string B, can you tell me
the length of the shortest possible string A. For example, A="abcdefg". I got abcdefgabcdefgabcdefgabcdefg.... Then I cut the red part: efgabcdefgabcde as string B. From B, you should find out the shortest A.
Input
Multiply Test Cases. For each line there is a string B which contains only lowercase and uppercase charactors. The length of B is no more than 1,000,000.
Output
For each line, output an integer, as described above.
Sample Input
Sample Output
有一个字符串,长度小于1000000。我一遍又一遍的重写。然后我有了一个新的字符串:aaaaaa ......现在我把它从两个不同的位置,得到一个新的字符串,然后,给你的字符串B,你能告诉我,例如最短的字符串的长度,A="abcdefg". I got abcdefgabcdefgabcdefgabcdefg....…然后我把红色部分:efgabcdefgabcde作为字符串B,你应该找出最短的A.
多试验例。每一行有一个字符串B只包含小写和大写。长度不超过1000000。
KMP模板题,调用求子模板串的模式值next
,再用串的长度减去next
即得到答案。
Time Limit:1000MS Memory Limit:131072KB 64bit IO Format:%lld
& %llu
SubmitStatus
Description
There is a string A. The length of A is less than 1,000,000. I rewrite it again and again. Then I got a new string: AAAAAA...... Now I cut it from two different position and get a new string B. Then, give you the string B, can you tell me
the length of the shortest possible string A. For example, A="abcdefg". I got abcdefgabcdefgabcdefgabcdefg.... Then I cut the red part: efgabcdefgabcde as string B. From B, you should find out the shortest A.
Input
Multiply Test Cases. For each line there is a string B which contains only lowercase and uppercase charactors. The length of B is no more than 1,000,000.
Output
For each line, output an integer, as described above.
Sample Input
bcabcab efgabcdefgabcde
Sample Output
3 7
有一个字符串,长度小于1000000。我一遍又一遍的重写。然后我有了一个新的字符串:aaaaaa ......现在我把它从两个不同的位置,得到一个新的字符串,然后,给你的字符串B,你能告诉我,例如最短的字符串的长度,A="abcdefg". I got abcdefgabcdefgabcdefgabcdefg....…然后我把红色部分:efgabcdefgabcde作为字符串B,你应该找出最短的A.
多试验例。每一行有一个字符串B只包含小写和大写。长度不超过1000000。
#include <cstdio> #include <cstring> #include <iostream> using namespace std; const int maxt=1000000+10; char t[maxt]; int next[maxt]; int main() { while(scanf("%s",t)!=EOF) { int p=0,cur,l; next[0]=-1; next[1]=0; l=strlen(t); for(cur=2; cur<=l; ++cur) { while(p>=0&&t[p]!=t[cur-1]) p=next[p]; next[cur]=++p; } printf("%d\n",l-next[l]); } return 0; }
KMP模板题,调用求子模板串的模式值next
,再用串的长度减去next
即得到答案。
相关文章推荐
- KMP算法的C#实现方法
- JavaScript中数据结构与算法(五):经典KMP算法
- 字符串算法--KMP--Java实现
- KMP算法(转载)
- kmp算法实现
- KMP算法详解
- linux kernel data struct: KMP算法实现
- 求一个字符串中连续出现次数最多的子串
- KMP算法总结
- KMP字符串匹配算法
- 字符串匹配之KMP算法
- kmp
- 【hiho一下第三周】KMP计算模式串在原串出现次数
- HDU1711 模板题-KMP
- HDU1358:Period
- hdu1711
- POJ 2406 Power Strings
- KMP next[]数组
- kmp 学习 hihocoder #1015
- KMP算法