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);
    }
}