Longest Palindromic Substring
来源:互联网 发布:淘宝上的zuzu是正品吗 编辑:程序博客网 时间:2024/06/13 02:11
题目:
给一个字符串s,找到s中最长的回文子串,假定s的最大长度为1000,最长回文子串唯一
分析:
有一个专门针对回文子串的算法,其时间复杂度为O(n),这就是manacher算法。把原串每个字符中间用一个没出现过的字符#分隔开来(非常巧妙的将奇数长度回文串与偶数长度回文串统一起来考虑了),算法的核心是用辅助数组p记录以每个字符为核心的最长回文字符串的半径,也就是p[i]记录了以str[i]为中心的最长回文字符串的半径。p[i]最小为1,此时回文字符串就是字符本身。mx记录了具有最长回文字符串的右边界,核心代码就是取最小值的那个。因为在当前以center下标为中心的可能最长回文串中,center右边的某点为中心的回文串小于当前的回文串长度的话p[i]就等于p[j],其中j为以center为中心与i对称的位置。因为之前j的p[j]已经算过了,这样可以节省计算。反之如果大于当前的回文串长度的话。p[i]就等于mx右边界减去i
参考:http://www.cnblogs.com/heyonggang/p/3386724.html
http://www.cnblogs.com/wuyiqi/archive/2012/06/25/2561063.html
代码:
class Solution {public: string longestPalindrome(string s) { int size = s.size(), i = 0; char *t = new char[2*size + 2]; char *q = t; int *p = new int[2*size + 2]; int mx = 0, id = 0, MAX = 0, center = 0; for(*q='#',i=0; i<size; ++i,*++q='#'){ *++q = s[i]; } for(*++q=0,p[0]=i=1; i<(2*size+2); i++){ p[i] = mx>i?min(p[2*id - i], mx-i):1; while(i+p[i] <= 2*size+1 && t[i+p[i]] == t[i-p[i]]){ p[i]++; } if(i+p[i] > mx){ mx = i + p[i]; id = i; } if(p[i] > MAX){ MAX = p[i]; center = i; } } delete(t); delete(p); return s.substr((center-MAX+1)/2, MAX-1); }};
0 0
- LeetCode: Longest Palindromic Substring
- LeetCode Longest Palindromic Substring
- LeetCode: Longest Palindromic Substring
- [Leetcode] Longest Palindromic Substring
- Longest Palindromic substring
- [LeetCode] Longest Palindromic Substring
- LeetCode5:Longest Palindromic Substring
- Leetcode : Longest Palindromic Substring
- Longest Palindromic Substring
- Longest Palindromic Substring
- [LeetCode]Longest Palindromic Substring
- leetcode Longest Palindromic Substring
- Longest Palindromic Substring
- LeetCode-Longest Palindromic Substring
- Longest Palindromic Substring
- Longest Palindromic Substring
- [LeetCode] Longest Palindromic Substring
- Longest Palindromic Substring leetcode
- Google笔试题整理(超全!)附部分答案
- POJ 1106 Transmitters (简单计算几何)
- 异步GET请求(使用委托)
- 计算几何之判断两条线段相交
- HashSet集合存储自定义对象及注意事项
- Longest Palindromic Substring
- h264基础知识梳理
- 数组应用
- a包含<span><img> 导致超链接失效的bug
- Nim游戏博弈(收集完全版)
- windowsNote(小便签)
- Android横竖屏切换
- hdu 5011 (nim博弈模版)
- nginx+tomcat+session共享