1088 最长回文子串 manacher算法
来源:互联网 发布:公司域名申请需要多久 编辑:程序博客网 时间:2024/06/03 23:00
求一个字符串的最长回文子串,模板题。
#include <iostream>
#include <string>
#include <cstring>
using namespace std;
void findBMstr(string& str)
{
int *p = new int[str.size() + 1];
memset(p, 0, sizeof(p));
int mx = 0, id = 0;
for(int i = 1; i <= str.size(); i++)
{
if(mx > i)
{
p[i] = (p[2*id - i] < (mx - i) ? p[2*id - i] : (mx - i));
}
else
{
p[i] = 1;
}
while(str[i - p[i]] == str[i + p[i]])
p[i]++;
if(i + p[i] > mx)
{
mx = i + p[i];
id = i;
}
}
int max = 0, ii;
for(int i = 1; i < str.size(); i++)
{
if(p[i] > max)
{
ii = i;
max = p[i];
}
}
max--;
int start = ii - max ;
int end = ii + max;
cout<<(end-start)/2<<endl;
/*
for(int i = start; i <= end; i++)
{
if(str[i] != '#')
{
cout << str[i];
}
}
cout << endl;
*/
delete p;
}
int main()
{
string str ;
cin>>str;
string str0;
str0 += "$#";
for(int i = 0; i < str.size(); i++)
{
str0 += str[i];
str0 += "#";
}
findBMstr(str0);
return 0;
}
- 1088 最长回文子串 manacher算法
- Manacher算法求最长回文子串
- Manacher算法求最长回文子串
- 最长回文子串(Manacher算法)
- Manacher算法 最长回文子串
- 最长回文子串的manacher算法
- 最长回文子串,Manacher算法
- Poj3974 最长回文子串 Manacher算法
- 最长回文子串 manacher算法
- Manacher算法(最长子回文串)
- hihocoder1032(最长回文子串manacher算法)
- HDU3068(最长回文子串manacher算法)
- 最长回文子串 用manacher算法
- hiho1032 : 最长回文子串 Manacher算法
- 最长回文子串 - Manacher算法
- 最长回文子串Manacher算法
- Manacher算法 - 最长回文子串
- manacher算法-最长子回文串
- 前端面试题之一二
- 视觉SLAM十四讲-第九讲例程运行出错
- 关于TLS经验小结(下)
- 基于Java配置SpringMvc 的HelloWorld项目
- xPath语法
- 1088 最长回文子串 manacher算法
- 算法时间复杂度和空间复杂度
- log4cplus的使用(学习笔记)
- firewalld的常用命令
- 六级_第一天
- 关于iptables的常用技巧方法
- 局部变量线程安全的理解
- Spring+监听器+Quartz集群(2)——quartz2.2.1创建表结构
- 51nod 1092 回文字符串 (添加几个变成回文)