Leetcode:Longest Palindromic Substring
2015-04-26 14:58
316 查看
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.
基本思路:回文字符串显然有个特征是沿着中心那个字符轴对称。比如aha沿着中间的h轴对称,a沿着中间的a轴对称。那么aa呢?沿着中间的空字符''轴对称。所以对于长度为奇数的回文字符串,它沿着中心字符轴对称,对于长度为偶数的回文字符串,它沿着中心的空字符轴对称。对于长度为N的候选字符串,我们需要在每一个可能的中心点进行检测以判断是否构成回文字符串,这样的中心点一共有2N-1个(2N-1=N-1
+ N)。
检测的具体办法是,从中心开始向两端展开,观察两端的字符是否相同。代码如下:
以上算法的时间复杂度为O(n^2),以下链接处有o(n)的算法,供参考学习:
http://articles.leetcode.com/2011/11/longest-palindromic-substring-part-ii.html
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.
基本思路:回文字符串显然有个特征是沿着中心那个字符轴对称。比如aha沿着中间的h轴对称,a沿着中间的a轴对称。那么aa呢?沿着中间的空字符''轴对称。所以对于长度为奇数的回文字符串,它沿着中心字符轴对称,对于长度为偶数的回文字符串,它沿着中心的空字符轴对称。对于长度为N的候选字符串,我们需要在每一个可能的中心点进行检测以判断是否构成回文字符串,这样的中心点一共有2N-1个(2N-1=N-1
+ N)。
检测的具体办法是,从中心开始向两端展开,观察两端的字符是否相同。代码如下:
class Solution { public: string expandAroundCenter(string s, int c1, int c2) { int l = c1, r = c2; int n = s.length(); while (l >= 0 && r <= n-1 && s[l] == s[r]) { l--; r++; } return s.substr(l+1, r-l-1); } string longestPalindrome(string s) { int n = s.length(); if (n == 0) return ""; string longest = s.substr(0, 1); // a single char itself is a palindrome for (int i = 0; i <= n-1; i++) { string p1 = expandAroundCenter(s, i, i); //长度为奇数的候选回文字符串 if (p1.length() > longest.length()) longest = p1; string p2 = expandAroundCenter(s, i, i+1);//长度为偶数的候选回文字符串 if (p2.length() > longest.length()) longest = p2; } return longest; } };
以上算法的时间复杂度为O(n^2),以下链接处有o(n)的算法,供参考学习:
http://articles.leetcode.com/2011/11/longest-palindromic-substring-part-ii.html
相关文章推荐
- 算法分析与设计丨第十五周丨LeetCode(19)——Longest Palindromic Substring(Medium)
- LeetCode【5】Longest Palindromic Substring
- Leetcode:Longest Palindromic Substring
- LeetCode:Longest Palindromic Substring 最长回文子串
- leetcode第一刷_Longest Palindromic Substring
- LeetCode 5 Longest Palindromic Substring(最大回文子字符串)
- LeetCode-Longest Palindromic Substring
- LeetCode Longest Palindromic Substring(最长回文子串)
- LeetCode OJ 5 Longest Palindromic Substring
- Longest Palindromic Substring--LeetCode
- leetcode 005 Longest Palindromic Substring(java)
- 【LeetCode】Longest Palindromic Substring && 【九度】题目1528:最长回文子串(腾讯2013年实习生招聘二面面试题)
- leetcode-Longest Palindromic Substring
- [leetcode][string] Longest Palindromic Substring
- Leetcode题解-5. Longest Palindromic Substring
- Leetcode---Longest Palindromic Substring
- leetcode之Longest Palindromic Substring
- leetcode[5]Longest Palindromic Substring
- leetcode problem (5) Longest Palindromic Substring
- leetcode第五题--Longest Palindromic Substring