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