5. 最长回文子串
给你一个字符串 s
,找到 s
中最长的回文子串。
示例 1:
输入:s = "babad"
输出:"bab"
解释:"aba" 同样是符合题意的答案。
示例 2:
输入:s = "cbbd"
输出:"bb"
示例 3:
输入:s = "a"
输出:"a"
示例 4:
输入:s = "ac"
输出:"a"
提示:
1 <= s.length <= 1000
s
仅由数字和英文字母(大写和/或小写)组成
思路:
中心扩散法,即用当前的字符,或当前的两个字符作为中心,不断左右外扩,比较左右两边是否一直相等。
当字符串长度为奇数时:
当字符串长度为偶数时:
Java代码
class Solution {
//声明保存最长回文子串的变量
String res = "";
public String longestPalindrome(String s) {
if(s==null||s.length() == 0) return res;
//分别以给定字符串的每一个字符作为中心,实行中心扩散法
for(int i = 0;i<s.length();i++){
//考虑给定字符串长度为奇数和偶数的情况
helper(s,i,i);
helper(s,i,i+1);
}
return res;
}
public void helper(String s,int left,int right){
while(left >= 0 && right < s.length() && s.charAt(left)==s.charAt(right)){
left--;
right++;
}
String temp = s.substring(left+1,right);
if(res.length() < temp.length()){
res = temp;
}
}
}