题目描述
给你一个字符串 s,找到 s 中最长的回文子串。
示例 1:
输入:s = “babad”
输出:“bab”
解释:“aba” 同样是符合题意的答案。
示例 2:
输入:s = “cbbd”
输出:“bb”
提示:
1 <= s.length <= 1000
s 仅由数字和英文字母组成
来源:力扣(LeetCode)
算法思路和分析
要找最长回文子串,我的想法是按长度从长到短进行循环枚举,找到回文子串即输出。
找回文子串的方法是,在确定的长度下,枚举起始位置(即得到结尾位置),双指针法从头和尾向中间集中,验证回文性是否满足。
算法时间复杂度,最坏情况下为O(n*len)(简单地考虑为每次的最坏情况的累积,理论上是否可能出现没有仔细验证,即可能不是紧的上界)
代码实现
class Solution {
public:
string longestPalindrome(string s) {
int len = s.length();
for(int i=len;i>0;i--){
for(int j=0;j<=len-i;j++){
int start = j;
int end = j+i-1;
while(start<end){
if(s[start]==s[end])
start++,end--;
else
break;
}
if(start>=end)
return s.substr(j,i);
}
}
return s.substr(0);
}
};