题目
给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为1000。
示例 1:
输入: “babad”
输出: “bab”
注意: "aba"也是一个有效答案。
示例 2:
输入: “cbbd”
输出: “bb”
public static String longestPalindrome(String s) {
int n = s.length();
int p = 0, q = 0;
int max1 = 0;
int max2 = 0;
int start1 = 0;
int end1 = 0;
int start2 = 0;
int end2 = 0;
for (int i = 0; i < n; i++) {//分别处理两个相邻的对称
p = i - 1;
q = i;
while (p >= 0 && q < n) {
if (s.charAt(p) == s.charAt(q)) {
if(q-p>max1) {
start1 = p;
end1 = q;
max1 = q - p;
}
p--;
q++;
} else {
break;
}
}
}
for (int i = 0; i < n; i++) {//两个间隔中间一个元素的对称
p = i - 1;
q = i + 1;
while (p >= 0 && q < n) {
if (s.charAt(p) == s.charAt(q)) {
if(q-p>max2) {
start2 = p;
end2 = q;
max2 = q - p;
}
p--;
q++;
} else {
break;
}
}
}
if (s.equals("")) {//空字符串处理
return "";
} else {
if (max1 > max2) {
return s.substring(start1, end1 + 1);
} else {
return s.substring(start2, end2 + 1);
}
}
}