一、题目地址
https://leetcode-cn.com/problems/a7VOhD/
二、具体代码
/**
* @param {string} s
* @return {number}
*/
// 中心扩散法
// 时间复杂度: O(n^2)
// 空间复杂度:O(1)
var countSubstrings = function(s) {
let n = s.length;
let res = 0;
/*
1、算法思想:
中心扩散法: 根据回文中心,左指针向左扩散,右指针向右扩散,若左右指针指向的字符相同,
则回文子串数目加一,直到回文中心数目遍历完,则计算出所有回文子串的数目
2、回文中心的个数计算公式为2*n-1
*/
for(let i=0; i<2*n-1; i++) {
let left = Math.floor(i / 2);//左指针计算公式
let right = left + i % 2;//右指针计算公式
while(left >= 0 && right < n && s[left] === s[right]) {
res++;//回文子串数目加一
left--;//左指针向左扩散
right++;//右指针向右扩散
}
}
return res;//返回所有的回文子串数目
};