5. 最长回文子串
5.1题目大意
给你一个字符串 s
,找到 s
中最长的回文子串。
输入:s = "babad"
输出:"bab"
解释:"aba" 同样是符合题意的答案。
5.2题目思路
通过中心扩散来计算,就是遍历i,设置左右两个j,k,看左右两个jk是否相等,相等就j–,k++
注意,考虑是奇偶行
如果为奇数 j=i-1,k=i+1
如果是偶数
j=i,k=i+1,
最后更新ans,比较大小
5.3代码实现
class Solution {
public:
string longestPalindrome(string s) {
int ans=0;
string res;
// 最长回文子串
for(int i=0;i<s.length();i++){
int j = i-1,k=i+1;
while(j>=0&&k<s.length()){
if(s[j]!=s[k]){
break;
}
j--;
k++;
}
if(k-1-j>ans){
ans=k-1-j;
res=s.substr(j+1,k-1-j);
}
// 上面这是使用中心对称,就是维奇数的方法
// 下面这个给是偶数
j = i,k=i+1;
while(j>=0&&k<s.length()){
if(s[j]!=s[k]){
break;
}
j--;
k++;
}
if(k-1-j>ans){
ans=k-1-j;
res=s.substr(j+1,k-1-j);
}
}
return res;
}
};