题目:给你一个字符串 s,找到 s 中最长的回文子串。
示例 1:
输入:s = "babad"
输出:"bab"
解释:"aba" 同样是符合题意的答案。
示例 2:
输入:s = "cbbd"
输出:"bb"
这里可以采用中心扩散的方法:从一个字符出发向两边扩散,要注意的是基数和偶数的问题,所以每次扩散需要从一个字符出发或者从两个字符出发。
代码如下:
public String longestPalindrome(String s) {
int maxLen = 0;
int start=0, end=0;
for(int i=0;i<s.length();++i) {
int len1=expand(s, i, i);
int len2=expand(s, i, i+1);
int len = Math.max(len1, len2);
if(end-start+1 < len) {
start = i-(len-1)/2;
end = i+len/2;
}
}
return s.substring(start, end+1);
}
public int expand(String s, int l, int r) {
while(l>=0 && r<s.length() && s.charAt(l)==s.charAt(r)) {
l--;
r++;
}
return r-l-1;
}
最后的执行结果: