5. Longest Palindromic Substring
题目描述
Given a string s, find the longest palindromic substring in s. You may assume that the maximum length of s is 1000.
Example:
Input: "babad"
Output: "bab"
Note: "aba" is also a valid answer.
Example:
Input: "cbbd"
Output: "bb"
Subscribe to see which companies asked this question.
解题思路
- 判断是否为空字符;
- 判断是否为单字符;
- 遍历字符,如果字符剩余长度小于已找到的最长回文长度的一半则终止,依次判断是否连续两个字符相等、判断是否叠字符相等;更新最长回文自字符。
参鉴LeetCode Discuss 大牛完成,效率很高~
代码实现
class Solution {
public:
string longestPalindrome(string s) {
if(s.empty()) return "";//空字符
else if(s.size()==1) return s;//单字符
else{//长字符
int start=0;
int maxlen=1;
for(int i=0; i<s.size(); ){//遍历字符
if(s.size()-i<=maxlen/2) break;//如果字符剩余长度小于已找到的最长回文长度的一半则终止
int p=i;
int k=i;
while(k<s.size()-1 && s[k]==s[k+1]) ++k;//连续两个字符相同
i=k+1;
while(k<s.size()-1 && p>0 && s[k+1]==s[p-1]){//叠字符相同
++k;
--p;
}
int newlen=k-p+1;
if(newlen>maxlen){//判断是否大于已找到的字符长度
start=p;
maxlen=newlen;
}
}
return s.substr(start,maxlen);
}
}
};