题目

给定一个字符串,你的工作是计算这个字符串中有多少个回文子串。

具备不同开始地位或完结地位的子串,即便是由雷同的字符组成,也会被视作不同的子串。

示例 1:

输出:"abc"
输入:3
解释:三个回文子串: "a", "b", "c"

示例 2:

输出:"aaa"
输入:6
解释:6个回文子串: "a", "a", "a", "aa", "aa", "aaa"

提醒:

输出的字符串长度不会超过 1000 。

题解思路

只须要留神一点:具备不同开始地位或完结地位的子串,即便是由雷同的字符组成,也会被视作不同的子串

回文子串说的通俗易懂一点,其实就是,正着读和反着读是一样的,比方“aba”,就一共是4个回文子串。

解题思路就是遍历两边字符串,第一遍的时候,既然每个字母都能够是独自的子串,那么,第一次遍历的时候,有几个字母就加几。第二次遍历,须要将以后字母跟前面的字母进行比拟,如果遇到雷同的字母,还须要进一步判断,正着读跟反着读是不是一样。是的话,子串数量加一。

代码实现

/** * @param {string} s * @return {number} */var countSubstrings = function(s) {    if (!s) return 0;    const sArr = s.split(''); // 字符串转数组    let count = 0; // 子串的总数量    for (let i = 0; i < s.length; i ++) {        count ++; // 第一次遍历每个字母都是独自的子串,都加一        for (let j = i + 1; j < s.length; j ++) {            if (sArr[i] === sArr[j]) {// 第二次遍历首要要求就是前后 两个字母雷同                if (s.substring(i, j + 1) === s.substring(i, j + 1).split('').reverse().join('')) { // 字母雷同是首要,还须要正反都雷同                    count ++; // 满足正反雷同持续加一                }            }        }    }    return count;};