【算法】【字符串】最长回文子串
1 题目
给你一个字符串 s
,找到 s
中最长的回文子串。
如果字符串的反序与原始字符串相同,则该字符串称为回文字符串。
示例 1:
输入:s = "babad" 输出:"bab" 解释:"aba" 同样是符合题意的答案。
示例 2:
输入:s = "cbbd"
输出:"bb"
提示:
1 <= s.length <= 1000
s
仅由数字和英文字母组成
2 解答
唉,超时了,待我后续想想:
class Solution { public String longestPalindrome(String s) { // 1 <= s.length <= 1000 无需校验参数 null // 先采用暴力 int len = s.length(); String res = ""; for (int i = 0; i < len; i++) { int left = 0, right = len - 1; String subRes = ""; // 左边 for (int j = 0; j <= i; j++) { String leftSub = s.substring(j, i + 1); if (leftSub.equals(new StringBuilder(leftSub).reverse().toString()) && leftSub.length() > res.length()) { res = leftSub; break; } } // 右边 for (int j = len - 1; j >= i; j--) { String rightSub = s.substring(i, j + 1); if (rightSub.equals(new StringBuilder(rightSub).reverse().toString()) && rightSub.length() > res.length()) { res = rightSub; break; } } // 取两边最短的 int subLen = Math.min(i - left, right - i); int j = 1; while (subLen > 0 && j <= subLen) { left = i - j; right = i + j; if (s.charAt(left) == s.charAt(right)) { subRes = s.substring(left, right + 1); j++; continue; } break; } if (subRes.length() > res.length()) { res = subRes; } if (subRes.length() == s.length()) { return subRes; } } return res; } }
加油。