给你一个字符串 s,找到 s 中最长的回文子串。
示例 1:
输入:s = “babad”
输出:”bab”
解释:”aba” 同样是符合题意的答案。
示例 2:
输入:s = “cbbd”
输出:”bb”
示例 3:
输入:s = “a”
输出:”a”
示例 4:
输入:s = “ac”
输出:”a”
提示:
1 <= s.length <= 1000
s 仅由数字和英文字母(大写和/或小写)组成
class Solution {
/**
对每个点进行左右扩散,寻找最长的距离,需要对起始一个长度和起始两个长度扩散
*/
public int[] is_valid(String s, int l, int r) {
while (l >= 0 && r < s.length() && s.charAt(l) == s.charAt(r)){
l--;
r++;
}
return new int[]{++l,--r};
}
public String longestPalindrome(String s) {
int n = s.length();
int start = 0, end = 0;
for (int i = 0; i < n; ++i) {
int[] a = is_valid(s,i,i);
int[] b = is_valid(s,i,i+1);
if (a[1] - a[0] > end - start) {
start = a[0];
end = a[1];
}
if (b[1] - b[0] > end - start) {
start = b[0];
end = b[1];
}
}
return s.substring(start,end+1);
}
}