赞
踩
给你一个字符串 s
,找到 s
中最长的 回文子串
示例 1:
输入:s = "babad" 输出:"bab" 解释:"aba" 同样是符合题意的答案。
示例 2:
输入:s = "cbbd" 输出:"bb"
- public String longestPalindrome(String s) {
- int n = s.length(); // 字符串长度
- int max = 1; // 最长回文子串的长度
- if (n < 2) {
- return s; // 字符串长度小于2直接返回
- }
- boolean[][] dp = new boolean[n][n]; // dp数组,记录子串是否为回文
- int l = 0; // 最长回文子串的起始位置
- for (int i = 1; i < n; i++) {
- for (int j = 0; j < i; j++) {
- if (s.charAt(j) != s.charAt(i)) {
- dp[j][i] = false; // 不相等的字符,不是回文
- } else {
- if (i - j < 3) {
- dp[j][i] = true; // 相邻或间隔一个字符相等,是回文
- } else {
- dp[j][i] = dp[j + 1][i - 1]; // 更长的子串回文性由内部决定
- }
- }
- if (dp[j][i] && i - j + 1 > max) { // 更新最长回文子串的信息
- l = j;
- max = i - j + 1;
- }
- }
- }
- return s.substring(l, l + max); // 返回最长回文子串
- }

Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。