5.最长回文子串
中心向两边查找
1、当前字符为中心
2、相邻字母相等时,当前相邻字母为中心
class Solution {
public String longestPalindrome(String s) {
if (s == null || s.length() == 0) return "";
int strLen = s.length();
int left = 0;
int right = 0;
int len = 0;
int mark = 0;
for (int i = 0; i < strLen; i++) {
//左右直接查找
left = i - 1;
right = i + 1;
while (left >= 0 && right < strLen && s.charAt(left) == s.charAt(right)) {
left--;
right++;
}
++left;
--right;
if (right - left + 1 > len) {
len = right - left + 1;
mark = left;
}
//相邻字母相同
left = i - 1;
right = i + 1;
if (right < strLen && s.charAt(i) == s.charAt(right)) {
right++;
while (left >= 0 && right < strLen && s.charAt(left) == s.charAt(right)) {
left--;
right++;
}
++left;
--right;
if (right - left + 1 > len) {
len = right - left + 1;
mark = left;
}
}
}
return s.substring(mark, mark + len);
}
}