51nod 1088 最长回文子串
来源:互联网 发布:mac安装什么虚拟机 编辑:程序博客网 时间:2024/05/18 01:58
1088 最长回文子串
基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题
收藏
关注
回文串是指aba、abba、cccbccc、aaaa这种左右对称的字符串。
输入一个字符串Str,输出Str里最长回文子串的长度。
Input
输入Str(Str的长度 <= 1000)
Output
输出最长回文子串的长度L。
Input示例
daabaac
Output示例
5
马拉车算法
#include<iostream>using namespace std;#include<string>#define min(x, y) ((x)<(y)?(x):(y))#define max(x, y) ((x)<(y)?(y):(x))string findLongestPalindrome3(string s){ int length=s.size(); for(int i=0,k=1;i<length-1;i++)//给字符串添加 # { s.insert(k,"#"); k=k+2; } length=length*2-1;//添加#后字符串长度 int *rad=new int[length](); rad[0]=0; for(int i=1,j=1,k;i<length;i=i+k) { while(i-j>=0&&i+j<length&&s.at(i-j)==s.at(i+j)) j++; rad[i]=j-1; for(k=1;k<=rad[i]&&rad[i-k]!=rad[i]-k;k++)//镜像,遇到rad[i-k]=rad[i]-k停止,这时不用从j=1开始比较 rad[i+k]=min(rad[i-k],rad[i]-k); j=max(j-k,0);//更新j } int max=0; int center; for(int i=0;i<length;i++) { if(rad[i]>max) { max=rad[i]; center=i; } } return s.substr(center-max,2*max+1);}int main(){ string str; cin>>str; str=findLongestPalindrome3(str); int cnt=0; for(int i=0;i<str.length();i++) { if(str[i]!='#') cnt++; } cout<<cnt<<endl; return 0;}
阅读全文
0 1
- 51nod 1088 最长回文子串
- 51nod 1088 最长回文子串
- 51nod 1088 最长回文子串
- 51nod-【1088 最长回文子串】
- 51nod 1088 最长回文子串
- 【51nod】1088 最长回文子串
- 51Nod 1088 最长回文子串
- 51Nod-1088-最长回文子串
- 51nod 1088 最长回文子串
- 51Nod 1088 最长回文子串
- 51Nod-1088-最长回文子串
- 51nod--1088 最长回文子串(连续!)
- 51nod 最长回文子串 V2(Manacher算法)
- 51nod-【hihocoder #1032 : 最长回文子串】
- nod-1089-最长回文子串 V2
- 51Nod 1088 最长回文串
- 51nod oj 1088 1089 最长回文子串 【Manacher算法】
- 1088 最长回文子串
- C++/C++11中std::exception的使用
- 人工智能做音乐
- python机器学习(1)python.sklearn库
- 首页动画结束跳转
- 一种流量成本节省60%以上的手机直播微信直播H5直播幼儿园直播方案
- 51nod 1088 最长回文子串
- HDU
- 计算机网络 滑动窗口协议
- 静态查找(顺序查找和折半查找)
- 一维数组排序
- K-means和PAM聚类算法Python实现及对比
- 打印okhttp请求log信息
- 登录注册使用数据库
- 视频编码中常用熵编码介绍