题目:
给你一个字符串 s
,找到 s
中最长的回文子串。
如果字符串的反序与原始字符串相同,则该字符串称为回文字符串。
示例 1:
输入:s = "babad" 输出:"bab" 解释:"aba" 同样是符合题意的答案。
示例 2:
输入:s = "cbbd" 输出:"bb"
提示:
1 <= s.length <= 1000
s
仅由数字和英文字母组成
题解:
思路:
利用二维dp,回文串的里面也一定是回文串,即dp[i+1][j-1]
for循环时,先j从0-len,然后i从j到0,这样是从里面到外面来循环,先填写中间的dp表
代码:
class Solution {public String longestPalindrome(String s) {int len=s.length();boolean[][] dp=new boolean[len][len];int l=0,r=0,max=0;for(int j=0;j<len;j++){for(int i=j;i>=0;i--){if(s.charAt(i)==s.charAt(j)&&(j-i<=1||dp[i+1][j-1])){dp[i][j]=true;if(j-i>max){max=j-i;l=i;r=j;}}}}return s.substring(l,r+1);}
}