hiho 第1周 最长回文子串(manacher)

裸题。原理看代码很好理解的。

 1 //hiho 第1周
 2 #include <set>
 3 #include <map>
 4 #include <queue>
 5 #include <deque>
 6 #include <stack>
 7 #include <cmath>
 8 #include <cstdio>
 9 #include <vector>
10 #include <string>
11 #include <cstring>
12 #include <fstream>
13 #include <iostream>
14 #include <algorithm>
15 using namespace std;
16 
17 #define eps 1e-8
18 #define PI acos(-1.0)
19 #define INF 0x3f3f3f3f
20 #define FAST_IO ios::sync_with_stdio(false)
21 
22 typedef long long LL;
23 const int N=1e6+10;
24 char str[N];
25 
26 int solve(){
27     int ans=1;
28     for(int i=1;str[i];i++){
29         int s=i,e=i;
30         while(str[e+1]==str[i]) e++;
31         i=e;
32         while(str[s-1]==str[e+1]) s--,e++;
33         if((e-s+1)>ans) ans=e-s+1;
34     }
35     return ans;
36 }
37 
38 int main(){
39     str[0]='$';
40     int n;
41     scanf("%d",&n);
42     while(n--){
43         scanf("%s",str+1);
44         printf("%d\n",solve());
45     }
46     return 0;
47 }
View Code

猜你喜欢

转载自www.cnblogs.com/ehanla/p/9594112.html