求一个字符串的最长连续回文串(模板)
来源:互联网 发布:数据分析报告范文 编辑:程序博客网 时间:2024/06/15 12:48
Manacher算法
#include<vector>#include<iostream>using namespace std;const int N=300010;int n, p[N];char s[N], str[N];#define _min(x, y) ((x)<(y)?(x):(y))void kp(){ int i; int mx = 0; int id;for(i=n; str[i]!=0; i++)str[i] = 0; //没有这一句有问题。。就过不了ural1297,比如数据:ababa aba for(i=1; i<n; i++) { if( mx > i ) p[i] = _min( p[2*id-i], p[id]+id-i ); else p[i] = 1; for(; str[i+p[i]] == str[i-p[i]]; p[i]++) ; if( p[i] + i > mx ) { mx = p[i] + i; id = i; } }}void init(){int i, j, k;str[0] = '$';str[1] = '#';for(i=0; i<n; i++){str[i*2+2] = s[i];str[i*2+3] = '#';}n = n*2+2;s[n] = 0;}int main(){int i, ans;while(scanf("%s", s)!=EOF){n = strlen(s);init();kp();ans = 0;for(i=0; i<n; i++)if(p[i]>ans)ans = p[i];printf("%d\n", ans-1);}return 0;}
0 0
- 求一个字符串的最长连续回文串(模板)
- 求一个字符串的最长回文串
- 用三重循环求一个字符串的最大回文串(连续重复出现的最长子串)
- 求一个字符串的最长子回文串
- 找出一个字符串中最长的连续回文
- 求字符串的最长回文子串
- 求字符串的最长回文子串
- 求一个字符串的最长回文子字符串
- 给定一个字符串,求它的最长回文子串的长度,并打印出最长回文子串
- 求一个字串中最长的连续字符串
- 求一个字符串中的最长回文序列
- 求一个字符串中的最长回文前缀
- 求一个字符串中的最长连续子串
- 求一个字符串中最长连续子串
- 【字符串】最长连续回文串(Longest Palindromic Substring)
- 判断一个字符串是否为回文,以及求一个字符串中最长回文串
- 求一个字符串的最长无重复字母的连续子串
- 2014百度校园招聘笔试——求一个字符串的最长回文子串
- [LeetCode] 3Sum Closest
- [LeetCode] 3Sum Solution
- C++ 虚函数与纯虚函数
- 第12周项目1.5
- 禁止Html5在手机上屏幕页面缩放
- 求一个字符串的最长连续回文串(模板)
- 手把手教你做iOS推送
- sql server 2012 或 2014 连接不上服务器
- [LeetCode] Two Sum
- [小技巧] cscope 正则查找
- linux-2.6.19 内核编译时 make modules执行错误!!
- android: 取消EditText控件自动获取焦点特性
- 无线Client接入过程
- PowerDesigner