代码随想录 647. 回文子串

发布时间:2024年01月11日

题目
给你一个字符串 s ,请你统计并返回这个字符串中 回文子串 的数目。
回文字符串 是正着读和倒过来读一样的字符串。
子字符串 是字符串中的由连续字符组成的一个序列。
具有不同开始位置或结束位置的子串,即使是由相同的字符组成,也会被视作不同的子串。

示例 1:
输入:s = “abc”
输出:3
解释:三个回文子串: “a”, “b”, “c”
示例 2:
输入:s = “aaa”
输出:6
解释:6个回文子串: “a”, “a”, “a”, “aa”, “aa”, “aaa”
提示:
1 <= s.length <= 1000
s 由小写英文字母组成

解题思路
统计字符串中回文串的数目可使用动态规划,定义dp[j][i]为索引值从j到i的子字符串是否是回文串,如果s[i]和s[j]相等,且i和j相差不超过1或dp[j+1][i-1]为true,则dp[j][i]为true. 初始化dp[j][i]中各个元素为false。用count来计数,最后返回count的值。

代码实现

class Solution {
public:
    int countSubstrings(string s) {
        if (s.empty()) return 0;
        int count = 0;
        vector<vector<bool>> dp(s.size(), vector<bool>(s.size(), false));

        for (int i = 0; i < s.size(); i++) {
            for (int j = 0; j <= i; j++) {
                if (s[i] == s[j] && (i - j <= 1 || dp[j + 1][i - 1]==true)) {
                    dp[j][i] = true;
                    count++;
                }
            }
        }
        return count;
    }
};
文章来源:https://blog.csdn.net/xiaohukuzai/article/details/135540582
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。