设为首页 加入收藏

TOP

HDU 3068 最长回文(Manacher)
2016-02-23 11:35:07 】 浏览:2659
Tags:HDU 3068 最长 Manacher

题意

给出一个只由小写英文字符a,b,c…y,z组成的字符串S,求S中最长回文串的长度.
回文就是正反读都是一样的字符串,如aba, abba等

思路

用特殊字符插入到s串中每两个字符中间,实现每个回文串都是奇数,再用manacher算法进行求解。

代码

#include 
   
     #include 
    
      #include 
     
       #include 
      
        #include 
       
         #include 
        
          using namespace std; const int N = 110009; char s[N], t[N<<1]; int p[N<<1]; int manacher(int len) { int id = 1, mx=0; p[0] = 1; for(int i=1; i
         
           i) p[i] = min(mx-i, p[2*id-i]); else p[i] = 1; while(t[i+p[i]] == t[i-p[i]]) p[i]++; if(mx < p[i]+i) { mx = p[i]+i; id = i; } } int ans = p[1]; for(int i=1; i
          
         
        
       
      
     
    
   
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Item 45:使用成员函数模板来接受.. 下一篇HDU 2335 Containers(暴力枚举)

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目