res
保存最长串内容,max
保存最长串长度,step
用于加快循环,根据题目要求返回。- 遍历
s
,双指针指向遍历i左右,先从右侧循环判断重复字符,就是s[i]
与右侧s[r]
判断相等,重复字符部分外层循环可跳步,step
加1,若相等r加1继续判断,就是s[i]
与右侧的右侧s[r]
判断… - 右侧无重复字符开始回文判断两头,
l
与r
,相等的话l递减r递增
。 2与3小点
的循环条件
除了判断相等
还要注意两侧的长度限制
。r-l-1
为暂时的回文字串长度,s.substr(l+1,r-l-1)
为暂时的回文字串内容,可以根据最大的长度进行保存。
var longestPalindrome = function(s) {
let res=0,max=0,step
for(let i=0;i<s.length;i+=step){
let l=i-1,r=i+1
step=1
while(r<s.length&&s[i]===s[r]){
r++
step++
}
while(l>=0&&r<s.length&&s[l]===s[r]){
l--
r++
}
if(r-l-1>max){
max=r-l-1
res=s.substr(l+1,max)
}
}
return res
};