以下题目来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/palindromic-substrings
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
647. 回文子串
给你一个字符串 s ,请你统计并返回这个字符串中 回文子串 的数目。
回文字符串 是正着读和倒过来读一样的字符串。
子字符串 是字符串中的由连续字符组成的一个序列。
具有不同开始位置或结束位置的子串,即使是由相同的字符组成,也会被视作不同的子串。
class Solution:
def countSubstrings(self, s: str) -> int:
递推关系 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))]
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:
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