5. 最长回文子串
给你一个字符串 s,找到 s 中最长的回文子串。
示例 1:
输入:s = “babad”
输出:“bab”
解释:“aba” 同样是符合题意的答案。
示例 2:
输入:s = “cbbd”
输出:“bb”
示例 3:
输入:s = “a”
输出:“a”
示例 4:
输入:s = “ac”
输出:“a”
核心:遍历整个字符串,每个字符进入函数向两边进行判断取遍历过程中最大值
class Solution {
public String longestPalindrome(String s) {
int start=0;
int end=0;
int max=0;
for (int i = 0; i < s.length(); i++) {
//回文不包括本身的情况:如aba中的b
int len1=len(s,i,i);
//回文包括本身的情况:如abba中的b
int len2=len(s,i,i+1);
int length=Math.max(len1,len2);
//取最长的一次回文子串,记录起始和结束下标start和end
if(max<=length){
max=length;
start=i-(length-1)/2;
//注意:subString取值为[),因此end需要+1
end=i+length/2+1;
}
}
return s.substring(start,end);
}
public int len(String s,int left,int right){
//边界判断和数值判断
while(left>=0&&right<=s.length()-1&&s.charAt(left)==s.charAt(right)){
left--;
right++;
}
//返回长度
return right-left-1;
}
}