给你一个字符串
s
,找到s
中最长的回文子串。如果字符串的反序与原始字符串相同,则该字符串称为回文字符串。
示例1:
输入:s = "babad" 输出:"bab" 解释:"aba" 同样是符合题意的答案。示例2:
输入:s = "cbbd" 输出:"bb"
中心扩散法:
从每一个位置出发,向两边扩散即可。遇到不是回文的时候结束
class Solution {
public String longestPalindrome(String s) {
if(s.length() == 0){
return "";
}
int left = 0,right = 0;
int maxLen = 0;
int maxStart = 0;
int strLen = s.length();
for(int i = 0;i < strLen;i++){
left = i - 1;
right = i + 1;
int len = 1;
while(left >=0 && s.charAt(left) == s.charAt(i)){
left--;
len++;
}
while(right < strLen && s.charAt(right) == s.charAt(i)){
right++;
len++;
}
while(left>=0 && right < strLen && s.charAt(left) == s.charAt(right)){
left--;
right++;
len = len + 2;
}
if(len > maxLen){
maxLen = len;
maxStart = left;
}
}
return s.substring(maxStart+1,maxStart+maxLen+1);
}
}