LeetCode——Longest Palindromic Substring
2015-06-07 15:17
309 查看
LeetCode——Longest Palindromic Substring
Leedcode 第五题:题目如下:
Given a string S,
find the longest palindromic substring in S.
You may assume that the maximum length of S is
1000, and there exists one unique longest palindromic substring.
题目翻译:
求解最大回文子串
关于其他时间复杂度的算法就不总结了,这里一起来看一看O(n)的算法——Manacher算法
关于Manacher算法:
http://www.felix021.com/blog/read.php?2040 http://blog.csdn.net/jarily/article/details/8630841
#include<iostream> #include<string> #include<vector> using namespace std; string longestPalindrome(string s) { vector<char> cvec; cvec.push_back('$'); cvec.push_back('#'); int i = 0; for(;i<s.size();i++) { cvec.push_back(s[i]); cvec.push_back('#'); } vector<int> ivec; int id = 0;//记录每个串的中心 int max = 0;//每个中心扩展的最大值 for(i=0;i<cvec.size();i++) { //if---else用于初始化记录每个回文子串的最大值的数组(这里用的vector容器) //其中每个i满足P[i] >= MIN(P[2 * id - i], mx - i),这里我们用p表示记录值的数组 if(max>i) { int temp = ivec[2*id-i]>max-i?max-i:ivec[2*id-i]; ivec.push_back(temp); } else ivec.push_back(1); //while循环即用于处理p[i]> MIN(P[2 * id - i], mx - i)的情况 while(cvec[i+ivec[i]] == cvec[i-ivec[i]]) { ivec[i] += 1; } if(ivec[i]+i>max) { max = ivec[i]+i; id = i; } } int mostlong = 0;//用于记录最大的值 int index = 0; for(i=0;i<ivec.size();i++) { if(mostlong<ivec[i]) { index = i;//记录最大的值的index mostlong = ivec[i]; } } //cout<<mostlong<<" "<<index; //分为奇数和偶数两种情况来返回要求的字符串 if(index%2==0) { index = index/2-1; int t = (mostlong-2)/2; string str(s.begin()+index-t,s.begin()+index+t+1); return str; } else { index /=2; int t = (mostlong-1)/2; string str(s.begin()+index-t,s.begin()+index+t); return str; } } int main() { string s = "cabab"; cout<<longestPalindrome(s); return 0; }
相关文章推荐
- 阶段性总结
- 欢迎使用CSDN-markdown编辑器
- 设计模式02_简单工厂模式
- CSDN-Markdown语法集锦
- WPF案例(二)模拟Apple OS 界面前后180度反转
- Foundation框架内容
- UnicodeDecodeError: 'ascii' codec can't decode byte 0x?? in position 1: ordinal not in range(128)
- AngularJS 作用域Scope的继承
- HDU 1290 献给杭电五十周年校庆的礼物
- STL源码分析之hashtable
- php+MySQL图书管理系统(二)
- Quartz入门实例
- WPF案例(-)模拟Windows7 Win+Tab切换
- Discuz!X/数据库 DB:: 函数操作方法
- IoC容器Autofac(1) -- 什么是IoC以及理解为什么要使用Ioc
- Theano3.4-练习之多层感知机
- 统计学知识
- 使用eval和loop在模版中直接读取数据库内容并输出
- 漂亮的表格样式(使用CSS样式表控制表格样式)
- Linux 网络相关命令