题目描述
这是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篇文章。