5. 最长回文子串
给你一个字符串 s,找到 s 中最长的回文子串。
示例 1:
输入:s = "babad"
输出:"bab"
解释:"aba" 同样是符合题意的答案。
示例 2:
输入:s = "cbbd"
输出:"bb"
示例 3:
输入:s = "a"
输出:"a"
示例 4:
输入:s = "ac"
输出:"a"
解题思路
我们求解以每个元素为中心的回文子串,比较长度求最大值
考虑到奇偶性,所以要求出以i为中心,和以i和i+1为中心的结果,比较求最大值
关于求以i为中心的回文子串,则确定左右下标,从中心向两周扩展
class Solution {
public String longestPalindrome(String s) {
String res="";
int n=s.length();
String[] dp=new String[n];
for(int i=0;i<n;i++){
String s1=Palindrome(s,i,i);
String s2=Palindrome(s,i,i+1);
res=res.length()>=s1.length()?res:s1;
res=res.length()>=s2.length()?res:s2;
}
return res;
}
//找以s[l]和s[j]为中心的回文子串
public String Palindrome(String s,int l ,int r){
while(l>=0 && r<s.length() && s.charAt(l)==s.charAt(r)){
l--;
r++;
}
return s.substring(l+1,r);
}
}
京公网安备 11010502036488号