题目
给定一个字符串,你的工作是计算这个字符串中有多少个回文子串。
具备不同开始地位或完结地位的子串,即便是由雷同的字符组成,也会被视作不同的子串。
示例 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;};