Leetcode 系列 —— 《647. 回文子串》

190 阅读1分钟

解题思路

把握解题重点,以 string 中的每一个字符为中心,向两边扩展,检查是否满足回文字符串 同时,拓展的时候分两种情况,一种是奇数类型的回文字符串,比如 abcbc,一种是偶数类型的回文字符串,比如 aabb,要同时去匹配这两种情况

// 拿到左右指针,然后假如左右指针相等,那么满足回文字符串的要求,继续拓展,直到不一致
  const expand = (left, right, s) => {
    let ret = 0;
    while (left >= 0 && right < s.length && s[left] === s[right]) {
      ret ++;
      left --;
      right ++;
    }
    return ret;
  }

  const countSubstrings = function(s) {
    let ret = 0;

    for (let i = 0; i < s.length; i++) {
      // 这里也是解题的重点,即上面所有的要满足奇偶两种情况的回文串,所以起始点:奇数情况,已自身为起点,偶数的话
      // 就是已自身和后面一位为起点
      ret += expand(i, i, s);
      ret += expand(i, i + 1, s);
    }
    return ret;
  };