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 };