LeetCode笔记汇总
题目
给你一个字符串 s,找到 s 中最长的回文子串。
思路
先考虑特殊情况:s为空或者s的长度小于1,此时的s必定不为回文串,直接返回一个空串""
正常情况下,使用中心扩展算法
如果一个子串是回文串,根据回文串的定义,将其左右两边各去掉一个字母之后仍然为回文串
因此我们可以在已知的回文串两边各再扩展一个字符,如果相等,则仍未回文串
代码
class Solution {
public String longestPalindrome(String s) {
if (s == null || s.length() < 1) {
return "";
}
int start = 0, end = 0;
for (int i = 0; i < s.length(); i++) {
int len1 = expandAroundCenter(s, i, i);
int len2 = expandAroundCenter(s, i, i + 1);
int len = Math.max(len1, len2);
if (len > end - start) {
start = i - (len - 1) / 2;
end = i + len / 2;
}
}
return s.substring(start, end + 1);
}
public int expandAroundCenter(String s, int left, int right) {
while (left >= 0 && right < s.length() && s.charAt(left) == s.charAt(right)) {
--left;
++right;
}
return right - left - 1;
}
}