什么是回文子串
回文子串,就是正着读和反正读是一样的字符串,比如 “上海自来水来自海上”
发音
palindrome 回文的
[ˈpælɪndroʊm]
解法
有3个解法
- 暴力解法 O(n^3)
- Manacher’s Algorithm O(n)
- 中心点枚举法 O(n^2)
- 动态规划 O(n^2)
中心点枚举法
使用双指针解答
分为两种情况
- 中心点是偶数
- 中心点是奇数
偶数
eab|bac
012 345
L R
偶数的情况下可以明确看到中心点是2和3中间的空隙。这个情况下
[i,i+1]
奇数
eabbace
0123456
(LR)
奇数的情况下可以看到中心点是index = 3
题解
class Solution {
public String longestPalindrome(String s) {
// 异常
if (null == s) {
return null;
}
String longest = "";
for (int i = 0; i < s.length(); i ++) {
String odd = isPalindrome(s, i, i);
if (longest.length() < odd.length()) {
longest = odd;
}
String even = isPalindrome(s, i, i + 1);
if (longest.length() < even.length()) {
longest = even;
}
}
return longest;
}
public String isPalindrome(String s, int left, int right) {
while (left >= 0 && right < s.length()) {
if (s.charAt(left) != s.charAt(right)) {
// 左右指针不相等的话,表示不是回文字符串
break;
}
left--;
right++;
}
return s.substring(left + 1, right);
}
}