题目如下:
给你一个字符串 s
,找到 s
中最长的回文子串。
如果字符串的反序与原始字符串相同,则该字符串称为回文字符串。
示例 1:
1 2 3
| 输入:s = "babad" 输出:"bab" 解释:"aba" 同样是符合题意的答案。
|
示例 2:
提示:
1 <= s.length <= 1000
s
仅由数字和英文字母组成
题解如下
方法一:动态规划
代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
| class Solution { public String longestPalindrome(String s) { int len = s.length(); if(len < 2){ return s; } boolean [][]dp = new boolean[len][len]; for(int i = 0; i < len; i++){ dp[i][i] = true; } char[] charArray = s.toCharArray(); int begin = 0; int childLen = 1; for(int l = 2; l <= len;l++){ for(int i = 0;i < len;i++){ int j = l + i - 1; if(j >= len){ break; } if(charArray[i]!=charArray[j]){ dp[i][j] = false; }else{ if(j - i < 3){ dp[i][j] = true; }else{ dp[i][j] = dp[i + 1][j - 1]; } } if(dp[i][j] && j - i + 1 > childLen){ childLen = j - i + 1; begin = i; } } } return s.substring(begin,begin + childLen); } }
|