题目
给你一个字符串 s,找到 s 中最长的回文子串。
思路
找到最小的那个字串,aba或者aa,然后向两边发散
伪代码
for(1,s.length){
第一种情况:if(s[i] == s[i+1]) aa,bb,cc形式
第二种情况:if(s[i+1] == s[i-1])aba形式
while(s[i-n] == s[i+n]){
n++;
}
i++;
len = max(len,2n)
}
实战
尽力了
class Solution {
public:
string longestPalindrome(string s) {
if(s.length() <= 1){
return s;
}
string revstr = "";
int mlen = 0;//最长回文字符串长度
for(int i = 0;i<s.length();i++){
int n = 0;
if(s[i] == s[i+1]){
while(i-n >= 0 && i+n <= s.length() && s[i-n] == s[i+1+n]){
n++;
}
n--;
if(2*n+2 >mlen){
mlen = 2*n+2;
revstr = s.substr(i-n,mlen);
}
n = 0;
}else if(i>=1 && s[i-1] == s[i+1]){
while(i-n >= 0 && i+n <= s.length() && s[i-n] == s[i+n]){
n++;
}
n--;
if(2*n+1 >mlen){
mlen = 2*n+1;
revstr = s.substr(i-n,mlen);
}
n = 0;
}
}
if(mlen == 0){
return s.substr(1);
}
else{
return revstr;
}
}
};