【每日一题】JavaScript之leetcode刷题 647. 回文子串 回文字符串

227 阅读1分钟

题目描述

这是leetcode中647. 回文子串难度为简单,字符串相关


给你一个字符串 s ,请你统计并返回这个字符串中 回文子串 的数目。

回文字符串 是正着读和倒过来读一样的字符串。

子字符串 是字符串中的由连续字符组成的一个序列。

具有不同开始位置或结束位置的子串,即使是由相同的字符组成,也会被视作不同的子串。

示例 1:

输入:s = "abc"

输出:3

解释:三个回文子串: "a", "b", "c"

示例 2:

输入:s = "aaa"

输出:6

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

提示:

1 <= s.length <= 1000

s 由小写英文字母组成

通过次数139,242提交次数211,214

来源:力扣(LeetCode)

链接:leetcode-cn.com/problems/pa…

著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

算法描述


/**
 * @param {string} s
 * @return {number}
 */
var countSubstrings = function(s) {
//看到回文字符串我开始懵了 23点27分
//这道题目要求求出字符串中所有的字串是会问字符串的个数,可以包括自身
//可以列一个表,如果存在的话,就不用对字符串进行判断是否是回文数,减少次数
//怎么判断是回文字符串?  真的是想不出来呀
//看了题解后瞬间明白,哈哈哈 23点33分
//情况可以分为两种一个是以一个点为中心的,一种是以两个点为中心的,然后向四周扩展!
    var  len = s.length
    var res = 0
    //以每个数为中心

    for(let i = 0;i < len;i++){
        for(let j = 0;j <= 1;j++){ //是以一个数为中心,还是以两个数为中心
            var l = i; //左边的数
            var r = i + j;//右边的数
            //左边的数等于右边的数,使用自增运算符,左边的大于0,右边的小于最大值
            while(l>= 0 && r<len && s[l--] == s[r++]){
                res++
            } 
        }
    }
    return res
};

最后


这是我2022年分享的「leetcode」第NO.6篇文章。