给你一个字符串 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
| class Solution {
public String longestPalindrome(String s) { int len = s.length(); if(len < 2){ return s; } int max_len = 1; int start = 0; String max_str = ""; char[] charArray = s.toCharArray(); for(int i = 0; i < len - 1; i++){ for(int j = i + 1; j < len; j++){ if(j - i + 1 > max_len && isPalindromic(charArray, i, j)){ start = i; max_len = j - i + 1; } } } return s.substring(start, start + max_len); }
public boolean isPalindromic(char[] s, int left, int right){ while(left < right){ if(s[left] != s[right]){ return false; } left ++; right --; } return true; } }
|
中心扩散法
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
| class Solution { public String longestPalindrome(String s) { int left = 0 , right = 0; int len = 1; int max_len = 0; String max_str = ""; for(int i = 0; i < s.length(); i++){ left = i - 1; right = i + 1; while(left >= 0 && s.charAt(left) == s.charAt(i)){ left --; len ++; } while(right < s.length() && s.charAt(right) == s.charAt(i)){ right ++; len ++; } while(left >= 0 && right < s.length() && s.charAt(left) == s.charAt(right)){ left --; right ++; len += 2; } if(len > max_len){ max_len = len; max_str = s.substring(left + 1, right); } len = 1; } return max_str; }
}
|
动态规划

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
| class Solution { public String longestPalindrome(String s) { char[] chars = s.toCharArray(); int len = chars.length; boolean[][] dp = new boolean[len][len]; int max_len = 0; String res = ""; for(int i = len-1 ; i >= 0; i--){ for(int j = i ; j < len; j ++){ if(chars[i] == chars[j]){ if(j - i <= 1){ dp[i][j] = true; }else{ if(dp[i+1][j-1]){ dp[i][j] = true; } } if(dp[i][j] && j - i + 1 > max_len){ max_len = j - i + 1; res = s.substring(i, j+1); } } } } return res; } }
|