以下题目来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/palindromic-substrings
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

647. 回文子串
给你一个字符串 s ,请你统计并返回这个字符串中 回文子串 的数目。

回文字符串 是正着读和倒过来读一样的字符串。

子字符串 是字符串中的由连续字符组成的一个序列。

具有不同开始位置或结束位置的子串,即使是由相同的字符组成,也会被视作不同的子串。

class Solution:
    def countSubstrings(self, s: str) -> int:
        #dp[i][j]表示区间范围[i,j]的子串是否为回文字符串
        #遍历顺序从下到上从左到右
        递推关系 if s[i]==s[j]: 
            #在判断i与j之间的距离
            if j-i<2: dp[i][j]=True
            elif dp[i+1][j-1]:
                dp[i][j]=True
        dp=[[False]*len(s) for _ in range(len(s))]
        # for i in range(len(s)):
        #     dp[i][0]=True
        res=0
        for i in range(len(s)-1,-1,-1):
            for j in range(i,len(s)):
                if s[i]==s[j]:
                    if j-i<2: 
                        res=res+1
                        dp[i][j]=True
                    else:
                        if dp[i+1][j-1]:
                            res=res+1
                            dp[i][j]=True
        return res

516. 最长回文子序列
给你一个字符串 s ,找出其中最长的回文子序列,并返回该序列的长度。

子序列定义为:不改变剩余字符顺序的情况下,删除某些字符或者不删除任何字符形成的一个序列。

class Solution:
    def longestPalindromeSubseq(self, s: str) -> int:
        #dp[i][j]表示 区间[i,j]之间最大的回文长度
        # 递推关系
        if s[i]==s[j]:
            dp[i][j]=dp[i-1][j-1]+2
        else:
            #说明字符的同时加入不能使字符串成为回文字 分别加入
            dp[i][j]=max(dp[i+1][j],dp[i][j-1])
        dp=[[0]*len(s) for _ in range(len(s))]
        for i in range(len(s)):
            dp[i][i]=1
        for i in range(len(s)-1,-1,-1):
            for j in range(i+1,len(s)):
                if s[i]==s[j]:
                    dp[i][j]=dp[i+1][j-1]+2
                else:
                    dp[i][j]=max(dp[i+1][j],dp[i][j-1])
        return dp[0][-1]

好耶!俺学完动态规划了 下一章学习二叉树相关问题

以下解法中「暴力算法」是基础,「动态规划」必须掌握,「中心扩散」方法要会写; 「Manacher 算法」仅用于扩宽视野,绝大多数的算法面试中,面试官都不会要求写这个方法(除非面试者是竞赛选手)。 方法一:暴力匹配 (Brute Force) 根据回文子串的定义,枚举所有长度大于等于 22 的子串,依次判断它们是否是回文; 在具体实现时,可以只针对大于“当前得到的最长回文子串长度”的子串进行“回文验证”; 在记录最长回文子串的时候,可以只记录“当前子串的起始位置”和“子串长度”,不必做截取 给你一个字符串 s ,请你统计并返回这个字符串回文子串 的数目。 回文字符串 是正着读和倒过来读一样的字符串。 子字符串字符串中的由连续字符组成的一个序列。 具有不同开始位置或结束位置的子串,即使是由相同的字符组成,也会被视作不同的子串。 示例 1: 输入:s = "abc" 解释:三个回文子串: "a", "b", "c" 示例 2: 输入:s = "aaa" 解释:6个回文子串: "a", "a", "a", "aa", "aa", "aaa" class Solution: def countSubstrings(self, s: str) -> int: c = [[0 for i in range(len(s)+1)]for i in range(len(s)+1)] for i in range(1,len(s)+1): for j in rang. 给定一个字符串,返回这个字符串中有多少个回文子串。 两个相同的回文子串出现在不同的位置,认为是2个回文串。 a、aa、aaa、aba、aabaa、abcba均认为是回文子串。 "aaa" a、a、a、aa、aa、aaa "abcb" a、b、c、b、bcb 函数签名: import java.util.*; public class Solution{ public int palindromeCou 给你一个字符串 s ,请你统计并返回这个字符串回文子串 的数目。 回文字符串:是正着读和倒过来读一样的字符串。 子字符串:是字符串中的由连续字符组成的一个序列。 具有不同开始位置或结束位置的子串,即使是由相同的字符组成,也会被视作不同的子串。 示例 1: 输入:s = “abc” 解释:三个回文子串: “a”, “b”, “c” 示例 2: 输入:s = “aaa” 解释:6个回文子串: “a”, “a”, “a”, “aa”,
我的LeetCode代码仓:https://github.com/617076674/LeetCode 原题链接:https://leetcode-cn.com/problems/palindromic-substrings/ 题目描述: 知识点:动态规划 思路一:暴力破解法 时间复杂度是O(n ^ 3),其中n为所给字符串的长度。空间复杂度是O(1)。 JAVA代码: pub...
647. 回文子串 给定一个字符串,你的任务是计算这个字符串中有多少个回文子串。 具有不同开始位置或结束位置的子串,即使是由相同的字符组成,也会被视作不同的子串。 示例 1: 输入:“abc” 解释:三个回文子串: “a”, “b”, “c” 示例 2: 输入:“aaa” 解释:6个回文子串: “a”, “a”, “a”, “aa”, “aa”, “aaa” 输入的字符串长度不会超过 1000 。 class Solution: def countSubstr
Python-pandas Passing list-likes to .loc or [] with any missing labels is no longer supported