[LeetCode-05]最长回文子串

152 阅读1分钟

最长回文子串

回文串:就是正向过去和反向过去都是同一个意思,abba,aba,大波美人鱼人美波大→_→

这题没有做出来,不太懂里面的动态规划,看了解答学会了用双子针来进行。

双子针法

主要是遍历字符串,然后用i和i+1来进行查找分别向字符串的两端进行查找l>=0 && r<s.length && s[l]===s[r] 不等的时候则跳出while循环,然后截取两者之间的长度就是回文串,再根据回文串来进行判断长度,拿到最长回文子串

var longestPalindrome = function (s) {
  let res = "";
  for (let i = 0; i < s.length; i++) {
    const s1 = palindrome(s, i, i);
    const s2 = palindrome(s, i, i + 1);
    res = res.length > s1.length ? res : s1;
    res = res.length > s2.length ? res : s2;
  }
  return res;
};

function palindrome (s, l, r) {
    while (l >= 0 && r < s.length && s[l] === s[r]) {
      l--;
      r++;
    }
    return s.substr(l + 1, r - l - 1)
  };