最长回文子串
给你一个字符串 s
,找到 s
中最长的
回文
子串。
示例 1:
1 2 3
| 输入:s = "babad" 输出:"bab" 解释:"aba" 同样是符合题意的答案。
|
示例 2:
提示:
1 <= s.length <= 1000
s
仅由数字和英文字母组成
f[j][i]
表示s[j,i]
是否为回文子串,枚举字符串的起点j
和终点i
,如果s.charAt(i)!=s.charAt(j)
,f[j][i]=false
如果s.charAt(i)==s.charAt(j)
,此时长度为2或3时,f[j][i]=true
,否则,判断f[j+1][i-1]
。当前字符串是回文串时更新最长长度和起始位置。
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
| class Solution { public String longestPalindrome(String s) { int n = s.length(); boolean[][] f = new boolean[n][n]; for (int i = 0; i < n; i++) { f[i][i] = true; } int len = 1; int begin = 0; int end = 0; for (int i = 1; i < n; i++) { for (int j = 0; j < i; j++) { if (s.charAt(i) == s.charAt(j)) { if (i - j < 3) { f[j][i] = true; } else { f[j][i] = f[j + 1][i - 1]; } } else { f[j][i] = false; } if (f[j][i] && i - j + 1 > len) { len = i - j + 1; begin = j; end = i; } } } return s.substring(begin, end + 1); } }
|