给你一个字符串 s
,找到 s
中最长的回文子串。
如果字符串的反序与原始字符串相同,则该字符串称为回文字符串。
示例 1:
输入:s = "babad" 输出:"bab" 解释:"aba" 同样是符合题意的答案。
示例 2:
输入:s = "cbbd" 输出:"bb"
思路
采用中心扩散算法。
依次遍历字符串每个节点,再从每个节点扩散开来。
主要有下面四种扩散方法!!
class Solution {
public String longestPalindrome(String s) {
if(s==null||s.length()==0) return "";
int len=s.length();
int ans=0;
int l=0;
int r=0;
int t=1;
int st=0;
for(int i=0;i<len;i++){
l=i-1;
r=i+1;
while(l>=0&&s.charAt(i)==s.charAt(l)){
t++;
l--;
}
while(r<len&&s.charAt(i)==s.charAt(r)){
r++;
t++;
}
while(l>=0&&r<len&&s.charAt(l)==s.charAt(r)){
t+=2;
l--;
r++;
}
if(t>ans){
ans=t;
st=l;
}
t=1;
}
return s.substring(st+1,ans+st+1);
}
}