📜  门| GATE CS Mock 2018 |问题 12(1)

📅  最后修改于: 2023-12-03 14:58:22.497000             🧑  作者: Mango

问题描述

这是一道来自 GATE CS Mock 2018 的编程问题,题目要求实现一个可以计算字符串中奇数长度回文子串数量的算法。

问题分析

回文子串是指正着读和倒着读都相同的字符串。奇数长度的回文子串的中心部分只有一个,所以我们可以以每个字符为中心向两侧扩展回文子串,直到无法扩展为止,并计算中心字符的回文子串的数量,然后将所有中心字符的回文子串数量加起来即为所求。

解决方案

Python 代码实现如下:

class Solution:
    def countSubstrings(self, s: str) -> int:
        count = 0
        n = len(s)
        for i in range(n):
            count += 1
            l, r = i - 1, i + 1
            while l >= 0 and r < n and s[l] == s[r]:
                count += 1
                l -= 1
                r += 1
        return count

使用类的方式封装了算法,其中参数 s 为输入的字符串,返回值为字符串中奇数长度回文子串的数量。程序从左往右遍历每个字符并以其为中心向两侧扩展,计算回文子串数量后加入总数中。

总结

本题考察了回文子串的计数方法,需要将每个字符均视为回文子串的中心并向两侧扩展。时间复杂度为 $O(n^2)$,空间复杂度为 $O(1)$。