首页 > 其他分享 >647. 回文子串(leetcode)

647. 回文子串(leetcode)

时间:2024-06-23 10:00:53浏览次数:32  
标签:子串 int 647 ans 字符串 leetcode dp 回文

647. 回文子串(leetcode)

题目描述

给你一个字符串 s ,请你统计并返回这个字符串中回文子串的数目。
回文字符串 是正着读和倒过来读一样的字符串。
子字符串 是字符串中的由连续字符组成的一个序列。

示例1

输入:s = “abc”
输出:3
解释:三个回文子串: “a”, “b”, “c”

示例2

输入:s = “aaa”
输出:6
解释:6个回文子串: “a”, “a”, “a”, “aa”, “aa”, “aaa”

提示信息

1 <= s.length <= 1000
s 由小写英文字母组成

题解1(C++版本)

class Solution {
public:
    int countSubstrings(string s) {
        int n = s.size();
        bool dp[n + 1][n + 1]; // dp[i][j] = true 表示区间[i,j]这部分子串是回文子串
        int ans = 0;
        memset(dp, 0, sizeof dp);
        for(int i = 1; i <= n; i++) {
            dp[i][i] = 1;
            ans++;
        }
        for(int i = 1; i < n; i++){
            if(s[i - 1] == s[i]){
                dp[i][i + 1] = 1;
                ans++;
            }
        }
        for(int len = 3; len <= n; len++){
            for(int i = 1; i + len - 1 <= n; i++){
                int j = i + len - 1;
                if(s[i - 1] == s[j - 1] && dp[i + 1][j - 1] == true){
                    dp[i][j] = true;
                    ans++;
                }
            }
        }

        return ans;
    }
};

标签:子串,int,647,ans,字符串,leetcode,dp,回文
From: https://blog.csdn.net/qq_45332149/article/details/139819709

相关文章

  • LeetCode665.非递减数列
    LeetCode刷题记录文章目录......
  • Leetcode 力扣 125. 验证回文串 (抖音号:708231408)
    如果在将所有大写字符转换为小写字符、并移除所有非字母数字字符之后,短语正着读和反着读都一样。则可以认为该短语是一个 回文串 。字母和数字都属于字母数字字符。给你一个字符串 s,如果它是 回文串 ,返回 true ;否则,返回 false 。示例1:输入:s="Aman,aplan,......
  • Leetcode 力扣 128. 最长连续序列 (抖音号:708231408)
    给定一个未排序的整数数组 nums ,找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度。请你设计并实现时间复杂度为 O(n) 的算法解决此问题。示例1:输入:nums=[100,4,200,1,3,2]输出:4解释:最长数字连续序列是[1,2,3,4]。它的长度为4。示例2:输入:nums=......
  • LeetCode:经典题之206、92题解及延伸
    系列目录88.合并两个有序数组52.螺旋数组567.字符串的排列643.子数组最大平均数150.逆波兰表达式61.旋转链表160.相交链表83.删除排序链表中的重复元素389.找不同目录系列目录206.反转链表92.反转链表II类和结构体访问修饰符206.反转链表......
  • 一千题,No.0093(延迟的回文数)
    给定一个 k+1 位的正整数 N,写成 ak​⋯a1​a0​ 的形式,其中对所有 i 有 0≤ai​<10 且 ak​>0。N 被称为一个回文数,当且仅当对所有 i 有 ai​=ak−i​。零也被定义为一个回文数。非回文数也可以通过一系列操作变出回文数。首先将该数字逆转,再将逆转数与该数相加......
  • LeetCode 134加油站,是环路,但我不绕圈,秒了。
    不绕圈是指,不需要看能不能转一圈回到起始点,只需要看能不能到达最后一个元素就行。在做这一道题的时候,如果判断能不能回到出发点,则需要绕一圈再回来,不仅需要创建临时变量,还要频繁使用%n获得余数,非常的不优雅。下面是优化方法:由题目很容易得出,如果存在解,则必定有gas总和大于......
  • LeetCode 2542. 最大子序列的分数(贪心、小顶堆)
    2542.最大子序列的分数思路:先对nums2按降序排列,然后遍历nums2的最小值,同时在区间[0,i]中选中k个最大的nums1即可。然后找出最大的ansclassSolution{public:typedefpair<int,int>PII;longlongmaxScore(vector<int>&nums1,vector<int>&nums2,intk)......
  • 双基回文数(python练习)
    编写一个程序来检查一个数字是否是双基回文数。回文是指从前往后读和从后往前读都一样的字母、数字的序列。双基回文数是指在十进制和二进制表示中都是回文的数字。例如:585=1001001001是一个双基回文,其二进制是回文形式,十进制也是回文形式。定义函数check_double_base_......
  • LeetCode刷题day3——链表part1
    203.移除链表元素这个题是二刷了一开始这个思路就是利用虚拟头结点,但是中间很多小细节都考虑不到,例如初始化一个新的链表,循环条件的写法等classSolution{public:structListNode{intval;ListNode*next;ListNode(intx):val(x),next(NULL){};//定义构......
  • LeetCode刷题day4——链表part2
    24.两两交换链表中的节点用pre代表第1个节点,cur代表它后面的相邻节点,tmp存储cur->next。但是问题找不到怎么返回新的节点。想着就循环一次,在第一次交换的时候就确认新的头结点。但还存在很多问题,具体如下:classSolution{public:ListNode*swapPairs(ListNode*he......