最长回文子串[中心扩展算法]
给你一个字符串 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 left = 0;
int right = 0;
//默认一个字符也是回文字符
int len = 1;
//定义最长串的开始下标
int MaxStart = 0;
//存储最大长度
int Maxlen = 0;
for(int i = 0; i < s.length(); ++i ){
left = i - 1;
right = i + 1;
//去重当前元素的左边
while(left >= 0 && s.charAt(i) == s.charAt(left)){
len++;
left--;
}
//去重当前元素的右边
while(right < s.length() && s.charAt(i) == s.charAt(right)){
len++;
right++;
}
//中心扩展算法
while(left >= 0 && right < s.length() && s.charAt(left) == s.charAt(right)){
len+=2;
right++;
left--;
}
//找出最大长度
if(len > Maxlen){
Maxlen = Math.max(Maxlen,len);
//更新MaxStart
MaxStart = left;
}
//更新len == 1
len = 1;
}
//当出现不符合的情况时,这时的left已经出界了,所以: s.substring是左闭右开
return s.substring(MaxStart + 1,MaxStart + 1 + Maxlen);
}
}