从中间开始往左右两边扫描,左右相同的话,左-右+,不同的话跳出,返回本次找到的最大回文串!
两点需要注意
1 奇数偶数,例如 abba 和abcba,考虑这两种情况是从(i,i+1) (i-1,i+1)来区分的。
2 在向两边移动跳出的时候,两个下标注意修改。
/**
* @param {string} s
* @return {string}
*/
var longestPalindrome = function(s) {
if (s.length <= 1) return s; //长度为1或0的字符串直接返回就行
var ret = "";
for (var i = 0 ;i < s.length; i++ ){
var tmp_str = findPal(s,i-1,i+1); //
if(tmp_str.length > ret.length){
ret = tmp_str;
}
tmp_str = findPal(s,i,i+1); //
if(tmp_str.length > ret.length){
ret = tmp_str;
}
}
return ret;
};
var findPal = function(str,left,right){
if(left < 0){
return str.substr(left+1,1);
}
if(right >= str.length){
return str.substr(right-1,1);
}
while(left >= 0 && right <str.length){
if(str[left] != str[right]) break;
left--;
right++;
}
//注意这里,因为在上面的while中left,right多操作了一次
left++;
right--;
return str.substr(left,right-left+1);
};