Given a string s, find the longest palindromic substring in s. You may assume that the maximum length of s is 1000.
Example:
Input: "babad" Output: "bab" Note: "aba" is also a valid answer.
Example:
Input: "cbbd" Output: "bb"
最长的回文序列,我觉得可以看成是中心对称的,但是分为奇数长度和偶数长度两种不同情况。
两种情况之下,都可以用双指针向两端移动,判断是否满足回文序列的要求。以不同的char作为回文中心点可以在每次的移动中
找到一个maxLen,遍历完所有的char之后,就可以找到max。同时记录下起点就行了。
public class Solution {
int begin = 0;
int maxLen = 0;
public String longestPalindrome(String s) {
if(s == null){
return null;
}
int length = s.length();
if(length <= 1){
return s;
}
for(int i = 0; i < length - 1; i++){
calculen(s,i,i);
calculen(s,i,i+1);
}
return s.substring(begin, begin + maxLen);
}
private void calculen(String s, int pointer1, int pointer2){
while(pointer1 >= 0 && pointer2 < s.length() && s.charAt(pointer1) == s.charAt(pointer2)){
pointer1--;
pointer2++;
}
if(maxLen < pointer2- pointer1 - 1){//这里还犯傻了,因为while结束的时候,在上一次执行的时候pointer1pointer2的值都是改变了的,所以是-2+1 = -1 啦
maxLen = pointer2 - pointer1 - 1;
begin = pointer1 + 1;
}
}
}