码迷,mamicode.com
首页 > 其他好文 > 详细

hdu 3294 manacher 求回文串

时间:2015-03-03 18:20:13      阅读:166      评论:0      收藏:0      [点我收藏+]

标签:

 

感谢:

http://blog.csdn.net/ggggiqnypgjg/article/details/6645824/

 

 

O(n)求给定字符串的以每个位置为中心的回文串长度。

中心思想:每次计算位置i的答案时,利用已经算出的1~i-1位置的答案。

 

 

技术分享
 1 #include <cstdio>
 2 #include <cstring>
 3 #include <iostream>
 4 #define maxn 222222
 5 using namespace std;
 6 
 7 int n, ans;
 8 char s[maxn];
 9 int r[maxn];
10 
11 int main() {
12     while( scanf( "%s", s )==1 ) {
13         n = strlen(s);
14         for( int i=n; i>=0; i-- ) {
15             s[(i<<1)+2] = s[i];
16             s[(i<<1)+1] = #;
17         }
18         s[0] = ^;
19         s[n+n+2] = $;
20         for( int i=2,id=1; i<=n+n+1; i++ ) {
21             if( id+r[id]>=i ) r[i] = min( r[id+id-i], id+r[id]-i );
22             else r[i] = 0;
23             while( s[i-r[i]-1]==s[i+r[i]+1] ) r[i]++;
24             if( id+r[id]<i+r[i] ) id=i;
25         }
26         ans = 0;
27         for( int i=1; i<=n+n+1; i++ )
28             ans = max( ans, r[i] );
29         printf( "%d\n", ans );
30     }
31 }
View Code

 

hdu 3294 manacher 求回文串

标签:

原文地址:http://www.cnblogs.com/idy002/p/4311583.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!