
/**
回文子串特点:中心对称,从中间出发向两端扩散,对比两指针指向的元素是否相同
从0开始枚举,假设每个元素都是一个回文子串的中心,向两遍扩散(单独一个字符是长度为1的回文子串)
注,回文子串长度可能是奇数也可能是偶数,枚举时奇数情况(从同一个点开始扩散) 与 偶数情况(从两个相邻的点开始扩散)需要同时扩散
*/
class Solution {
/**
回文子串特点:中心对称,从中间出发向两端扩散,对比两指针指向的元素是否相同
从0开始枚举,假设每个元素都是一个回文子串的中心,向两遍扩散(单独一个字符是长度为1的回文子串)
注,回文子串长度可能是奇数也可能是偶数,枚举时奇数情况(从同一个点开始扩散) 与 偶数情况(从两个相邻的点开始扩散)需要同时扩散
*/
private int maxStart = 0;
private int maxLen = 0;
private String s;
public String longestPalindrome(String s) {
this.s = s;
for(int i = 0; i < s.length(); i++) {
isHW(i, i);
isHW(i, i + 1);
}
return s.substring(maxStart, maxStart + maxLen);
}
private void isHW(int left, int right) {
while(left >= 0 && right < s.length() && s.charAt(left) == s.charAt(right)) {
if(right - left + 1 > maxLen) {
maxStart = left;
maxLen = right - left + 1;
}
left--;
right++;
}
}
}
662

被折叠的 条评论
为什么被折叠?



