Skip to main content

回文子串

Tips

题目类型: 中心扩散法

相关题目:

题目

给定一个字符串, 你的任务是计算这个字符串中有多少个回文子串. 具有不同开始位置或结束位置的子串, 即使是由相同的字符组成, 也会被视作不同的子串.

示例
输入: 'abc'
输出: 3
解释: 三个回文子串: 'a', 'b', 'c'
输入: 'aaa'
输出: 6
解释: 六个回文子串: 'a', 'a', 'a', 'aa', 'aa', 'aaa'

题解

思路参考 5. 最长回文子串.

var countSubstrings = function (s) {
let n = s.length
let ans = 0

for (let i = 0; i < 2 * n - 1; i++) {
let left = (i / 2) | 0
let right = left + (i % 2)

while (left < n && right < n && s[left] === s[right]) {
left--
right++
ans++
}
}

return ans
}

复杂度分析

  • 时间复杂度: O(n2)
  • 空间复杂度: O(n)