题目:最长回文子串
给你一个字符串 s
,找到 s
中最长的回文子串
示例 1:
输入:s = "babad" 输出:"bab" 解释:"aba" 同样是符合题意的答案。
示例 2:
输入:s = "cbbd" 输出:"bb"
提示:
1 <= s.length <= 1000
s
仅由数字和英文字母组成
解题思路:
一、考虑当子串长度为零的情况,直接返回空子串(空子串也是回文子串)
二、判断子串的个数为偶数还是奇数
当子串的个数为奇数时,判断以i为中心的子串左右两边的字符是否相同
当子串的个数为偶数时,判断以i和i+1的中线为中心的子串左右两边的字符是否相同
三、求出满足上述条件的最长子串,即为字符串s最长的回文子串
代码实现:
class Solution {
public String longestPalindrome(String s) {
if (s.length()==0) return s;
int res=1;
int ll=0;
int rr=0;
for(int i=0;i<s.length();i++){
int l=i-1;
int r=i+1;
while (l>=0&&r<s.length()&&s.charAt(l)==s.charAt(r)){
int len=(r-l+1);
if (len>res){
res=len;
ll=l;
rr=r;
}
l--;
r++;
}
l=i;
r=i+1;
while (l>=0&&r<s.length()&&s.charAt(l)==s.charAt(r)){
int len=(r-l+1);
if(len>res){
res=len;
ll=l;
rr=r;
}
l--;
r++;
}
}
return s.substring(ll,rr+1);
}
}