标签:
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2594
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 7354 Accepted Submission(s):
2620
1 #include <stdio.h> 2 #include <string.h> 3 char s1[50050],s2[50050]; 4 int next[50050]; 5 void getnext() 6 { 7 int i = 0,j = -1; 8 next[0] = -1; 9 int len = strlen(s1); 10 while (i < len) 11 { 12 if (j == -1 || s1[i] == s1[j]) 13 { 14 i ++; 15 j ++; 16 if (s1[i] == s1[j]) 17 next[i] = next[j]; 18 else 19 next[i] = j; 20 } 21 else 22 j = next[j]; 23 } 24 } 25 int kmp() 26 { 27 int i = 0,j = 0; 28 int len1 = strlen(s1); 29 int len2 = strlen(s2); 30 while (i < len2) //特别注意 跟模板有少许的差别 31 { 32 if (j == -1 || s1[j] == s2[i]) 33 { 34 i ++; 35 j ++; 36 } 37 else 38 j = next[j]; 39 } 40 return j; 41 } 42 int main() 43 { 44 while (~scanf("%s",s1)) 45 { 46 scanf("%s",s2); 47 getnext(); 48 int len = kmp(); 49 50 for (int i = 0; i < len; i ++) 51 printf("%c",s1[i]); 52 if (len) 53 printf(" "); 54 printf("%d\n",len); 55 } 56 return 0; 57 }
HDU 2594 Simpsons’ Hidden Talents
标签:
原文地址:http://www.cnblogs.com/yoke/p/5861892.html