标签:other figure fir sts let esc sel min may
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 15015 Accepted Submission(s): 5151
题意:
给定字符串$s1$$s2$,在$s1$中找一个前缀和$s2$的后缀匹配的长度最长。
思路:
$next$数组的定义。
所以把$s1$$s2$拼起来求$next$就可以了。需要考虑一下越过他们的边界的情况。
1 #include<iostream> 2 //#include<bits/stdc++.h> 3 #include<cstdio> 4 #include<cmath> 5 #include<cstdlib> 6 #include<cstring> 7 #include<algorithm> 8 #include<queue> 9 #include<vector> 10 #include<set> 11 #include<climits> 12 #include<map> 13 using namespace std; 14 typedef long long LL; 15 typedef unsigned long long ull; 16 #define pi 3.1415926535 17 #define inf 0x3f3f3f3f 18 19 const int maxn = 50005; 20 char s1[maxn * 2], s2[maxn]; 21 int nxt[maxn * 2]; 22 23 void getnxt(char *s) 24 { 25 int len = strlen(s); 26 nxt[0] = -1; 27 int k = -1; 28 int j = 0; 29 while(j < len){ 30 if(k == -1 || s[j] == s[k]){ 31 ++k;++j; 32 if(s[j] != s[k]){ 33 nxt[j] = k; 34 } 35 else{ 36 nxt[j] = nxt[k]; 37 } 38 } 39 else{ 40 k = nxt[k]; 41 } 42 } 43 } 44 45 bool kmp(char *s, char *t) 46 { 47 getnxt(s); 48 int slen = strlen(s), tlen = strlen(t); 49 int i = 0, j = 0; 50 while(i < slen && j < tlen){ 51 if(j == -1 || s[i] == t[j]){ 52 j++; 53 i++; 54 } 55 else{ 56 j = nxt[j]; 57 } 58 } 59 if(j == tlen){ 60 return true; 61 } 62 else{ 63 return false; 64 } 65 } 66 67 int main() 68 { 69 while(scanf("%s", s1) != EOF){ 70 //getchar(); 71 scanf("%s", s2); 72 //cout<<s1<<endl<<s2<<endl; 73 int len1 = strlen(s1), len2 = strlen(s2); 74 strcat(s1, s2); 75 //cout<<s1<<endl; 76 getnxt(s1); 77 //cout<<nxt[len1 + len2]<<endl; 78 if(nxt[len1 + len2] > min(len1, len2)){ 79 for(int i = 0; i < min(len1, len2); i++){ 80 printf("%c", s1[i]); 81 } 82 printf(" %d\n", min(len1, len2)); 83 } 84 else{ 85 int ans = nxt[len1 + len2]; 86 if(ans){ 87 for(int i = 0; i < ans; i++){ 88 printf("%c", s1[i]); 89 } 90 printf(" "); 91 } 92 93 printf("%d\n", ans); 94 } 95 } 96 return 0; 97 }
hdu2594 Simpsons' Hidden Talents【next数组应用】
标签:other figure fir sts let esc sel min may
原文地址:https://www.cnblogs.com/wyboooo/p/10034300.html