1652843914(1).png

思路

与647一样的解法,多了要判断哪个最长的步骤。

下面这种写法性能比较好,我一开始是在while里就一直slice字符串来判断长度,浪费性能。

  1. var longestPalindrome = function(s) {
  2. // 基于中心扩散法
  3. let result =''
  4. const findMaxPalindrome =function(s,left,right){
  5. while(left>=0&&right<s.length&&s[left]===s[right]){
  6. // 找到回文,开始比较长度
  7. // 这里超时,频繁操作slice
  8. // let subStr =s.slice(left,right+1)
  9. // res =subStr.length>res.length? subStr:res
  10. left--
  11. right++
  12. }
  13. // 注意此处left,right的值循环完后 是恰好不满足循环条件的时刻
  14. // 此时left到right的距离为right-left+1,但是两个边界不能取 所以应该取left+1到right-1的区间
  15. if (right - left - 1 > result.length) {
  16. // slice也要取[left+1,right-1]这个区间
  17. result = s.slice(left + 1, right)
  18. }
  19. return result
  20. }
  21. for(let i=0;i<s.length;i++){
  22. findMaxPalindrome(s,i,i)
  23. findMaxPalindrome(s,i,i+1)
  24. }
  25. return result
  26. };