题目描述:给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。
例如:
输入: “babad”
输出: “bab”
注意: “aba” 也是一个有效答案。
思路:中心扩展法,对每一个字符都像两边扩展,统计最长回文子串,将起始下标和终止下标记录下来
class Solution {
public String longestPalindrome(String s) {
if(s == null || s.length() == 0){
return s;
}
int start = 0;
int end = 0;
for(int i = 0 ; i < s.length() ; i++){
int len1 = helper(s , i , i);
int len2 = helper(s , i , i+1);
int len = Math.max(len1 , len2);
if(len > end - start + 1){
start = i - (len - 1)/2; //记录最大回文子串的起始下标
end = i + len/2; //记录最大回文子串的终止下标
}
}
return s.substring(start , end + 1);
}
int helper(String s , int left , int right){
while(left >= 0 && right < s.length() && s.charAt(left) == s.charAt(right)){
left--;
right++;
}
return right - left - 1;
}
}