Description
Given a string s, find the longest palindromic substring in s. You may assume that the maximum length of s is 1000.
Example 1:
Input: "babad"
Output: "bab"
Note: "aba" is also a valid answer.
Example 2:
Input: "cbbd"
Output: "bb"
分析
题目的意思是:找出一个字符串中的最长回文子串。
- 这道题从中间开花,遍历每个结点,把每个节点都当作回文子串的中心位置,然后向左右拓展,找出所有这种回文子串中最长的就够了。
代码
class Solution {
public:
string longestPalindrome(string s) {
int max_len=0;
int start=0;
for(int i=0;i<s.length();i++){
int left=i-1;
int right=i+1;
while(left>=0&&right<s.length()&&s[left]==s[right]){
int cur_len=right-left;
if(cur_len>max_len){
max_len=cur_len;
start=left;
}
left--;
right++;
}
left=i;
right=i+1;
while(left>=0&&right<=s.length()&&s[left]==s[right]){
int cur_len=right-left;
if(cur_len>max_len){
max_len=cur_len;
start=left;
}
left--;
right++;
}
}
return s.substr(start,max_len+1);
}
};
参考文献
Manacher’s Algorithm 马拉车算法LeetCode 5. Longest Palindromic Substring(最长回文连续子串)[Leetcode] Longest palindromic substring 最长回文子串Longest Palindromic Substring Part II