LintCode-最长回文子串
来源:互联网 发布:360路由器怎么链接网络 编辑:程序博客网 时间:2024/05/21 15:49
给出一个字符串(假设长度最长为1000),求出它的最长回文子串,你可以假定只有一个满足条件的最长回文串。
您在真实的面试中是否遇到过这个题?Yes
样例
给出字符串 "abcdzdcab"
,它的最长回文子串为 "cdzdc"
。
挑战
标签 Expand O(n2) 时间复杂度的算法是可以接受的,如果你能用 O(n) 的算法那自然更好。
相关题目 Expand
分析:尝试写了遍manacher算法。其中p[i]表示以i为中心,包括i在内的半径
代码:
class Solution {public: /** * @param s input string * @return the longest palindromic substring */ string longestPalindrome(string& s) { // Write your code string news = "$#"; for(int i=0;i<s.length();i++){ news+=s[i];news+="#";} vector<int> p(news.length(),0); int mx = 0; int id = 0; int retid = 0; int maxp = 0; for(int i=0;i<news.length();i++) { if(mx>i) { p[i] = min(mx-i,p[2*id-i]); } else p[i] = 1; while(i-p[i]>=0&&news[i+p[i]]==news[i-p[i]]) p[i]++; if(i+p[i]>mx) { mx = i+p[i]; id = i; } if(p[i]>maxp) { maxp = p[i]; retid = i; } } string ret = ""; for(int i=retid-p[retid]+1;i<=retid+p[retid]-1;i++) if(news[i]!='#') ret+=news[i]; return ret; }};
0 0
- LintCode-最长回文子串
- LintCode:最长回文子串
- lintcode,最长回文子串
- [lintcode]最长回文子串
- lintcode -- 最长回文子串
- 最长回文子串-LintCode
- LintCode 最长回文子串
- lintcode最长回文子串
- lintcode-最长回文子串-200
- LintCode之最长回文子串
- LintCode 最长回文串
- lintcode:最长回文串
- 最长回文串-LintCode
- **[Lintcode]Longest Palindromic Substring最长回文子串
- LintCode 最长回文子串(Manacher算法)
- lintcode(627)最长回文串
- LintCode之最长回文串
- 最长回文子串
- 搜索树
- HDOJ 3371 Connect the Cities(最小生成树--prime 水)
- DFS
- 空手套白狼--基于系统分区镜像的修改
- 关于技术博客我想说
- LintCode-最长回文子串
- 如何手动生成heapdump和javacore文件
- Android 不归路之百度地图API学习(导航篇)
- 黑马程序员Java学习笔记之单例设计模式
- 1041 最长公共子序列
- HDU 2255 奔小康赚大钱 (KM算法)
- 第 1 页:Spring的骨骼架构
- SAP配置webdynpro完全手册
- 【玩转GridView】之简单实现隐藏列