题目描述
给你一个字符串 s,找到 s 中最长的回文子串。
题解
class Solution {
public String longestPalindrome(String s) {
int maxLength = 1;
int maxMidIndex = 0;
for(int i = 0; i < s.length(); i++) {
int lengthOdd = 1;
int lengthEven = 0;
int left = i - 1;
int right = i + 1;
while(left >= 0 && right < s.length() && s.charAt(left) == s.charAt(right)) {
lengthOdd += 2;
left--;
right++;
}
left = i;
right = i + 1;
while(left >= 0 && right < s.length() && s.charAt(left) == s.charAt(right)) {
lengthEven += 2;
left--;
right++;
}
int length = Math.max(lengthEven, lengthOdd);
if(maxLength < length) {
maxLength = length;
maxMidIndex = i;
}
}
if(maxLength % 2 == 0) {
String res = s.substring(maxMidIndex - maxLength / 2 + 1, maxMidIndex + maxLength / 2 + 1);
return res;
}else {
String res = s.substring(maxMidIndex - maxLength / 2, maxMidIndex + maxLength / 2 + 1);
return res;
}
}
}
分析
分奇偶分别以每个字符为中心向两侧求最大长度