问题描述
LeetCode 5. 最长回文子串 (opens in a new tab),难度中等。
给你一个字符串 s
,找到 s
中最长的回文子串。
如果字符串的反序与原始字符串相同,则该字符串称为回文字符串。
示例 1
输入:s = "babad" 输出:"bab" 解释:"aba" 同样是符合题意的答案。
示例 2
输入:s = "cbbd" 输出:"bb"
提示:
1 <= s.length <= 1000
s
仅由数字和英文字母组成
题解
Solution.java
class Solution {
public String longestPalindrome(String s) {
if (s.length() <= 1) return s;
char[] chars = s.toCharArray();
int left, right;
String ans = String.valueOf(chars[0]);
for (int i = 0; i < s.length() - 1; ++i) {
// 奇数情况下
left = i;
right = i;
while (left >= 0 && right <= s.length() - 1 && chars[left] == chars[right]) {
left--;
right++;
}
ans = ans.length() > s.substring(left + 1, right).length() ? ans : s.substring(left + 1, right);
// 偶数情况下
left = i;
right = i + 1;
while (left >= 0 && right <= s.length() - 1 && chars[left] == chars[right]) {
left--;
right++;
}
ans = ans.length() > s.substring(left + 1, right).length() ? ans : s.substring(left + 1, right);
}
return ans;
}
}