首页 > 其他分享 >长回文子串-动态规划解法

长回文子串-动态规划解法

时间:2023-08-31 18:11:14浏览次数:38  
标签:子串 示例 len ans 字符串 解法 回文

题目:

给你一个字符串 s,找到 s 中最长的回文子串。

如果字符串的反序与原始字符串相同,则该字符串称为回文字符串。

示例 1:

输入:s = "babad"
输出:"bab"
解释:"aba" 同样是符合题意的答案。

Golang 代码示例

上面三行对应循环三次的执行逻辑

逻辑视频讲解

func longestPalindrome(s string) string {
	//根据字符长度初始化一个二维数组,下标对应字幕的位置
	dp := make([][]bool, len(s))
	for i := 0; i < len(s); i++ {
		dp[i] = make([]bool, len(s))
	}
	ans := ""
	for i := 0; i < len(s); i++ {
		for k := 0; k <= i; k++ {
			//前后字符相同 && 中间的字符也是回文串
			dp[i][k] = s[i] == s[k] && (i-1 < k+1 || dp[i-1][k+1])
			if dp[i][k] && i-k+1 > len(ans) {
				ans = s[k : i+1]
			}
		}
	}
	return ans
}

标签:子串,示例,len,ans,字符串,解法,回文
From: https://www.cnblogs.com/yweihum/p/17670171.html

相关文章

  • 几则组合求和式的积分解法
    记号约定:本文中默认\(n\in\mathbb{N}\),\(k\in\mathbbZ\),隐去范围的求和指标取一切使求和对象有意义且非零的值.【例1】求\[\sum_k{n\choosek}\dfrac1{k+1}.\]【解】注意到\(\displaystyle\intx^k\mathrm{d}x=\dfrac1{k+1}x^{k+1}+C\),于是\[\begin{aligned}\sum_k{n\ch......
  • Java后端向前端返回文件流——实现下载功能
    前端实现文件下载功能有多种方法,这里就不一一介绍,这里只介绍使用文件流下载的实现方法。既然是文件流那就肯定需要给前端返回一堆二进制编码,作为后端就可以返回一个OutPutStream后端可以使用Java中servlet提供的HttpServletResponse,核心步骤是要设置响应的数据类型,设置为某一类......
  • 最长回文数
    问题描述输入一个包含N个正整数的数组,求出这个数组中包含的最长的回文数组是什么,如果有相同长度的最长回文数,输出最靠前的一个。解题思路伪码:INPUTA[]FORIIN1,N{ FORJINI,N{ IFHUIWEN(A,I,J)&&J-I+1>MAXLEN{ X,Y,MAXLEN=I,J,J-I+1 } }}OUTPUTA[X......
  • leetcode 题库994——bfs典型解法(队列+递归实现)
     classSolution:deforangesRotting(self,grid:list[list[int]])->int:m,n=len(grid),len(grid[0])queue,good=[],[]defbfs(queue,good,m,n,grid):times=0directions=[(-1,0),(1,0),(0,1),(0,-1)]......
  • LeetCode题库77.组合——dfs典型解法,递归+回溯+剪枝
     classSolution:defcombine(self,n:int,k:int):nums=[x+1forxinrange(n)]res,ans=[],[]defdfs(nums:list[int]):iflen(ans)==k:ans_copy=ans.copy()#复制,避免ans数组改变使res跟着改变......
  • 回文自动机(PAM)学习笔记
    传送门我认为理解回文自动机需要图,以\(abbaabba\)为例,它的回文树是这样的:令树上的每一个点为一个回文串,其中,\(1\)为根的树中的点回文串长度为奇数,且最中间的那个字母就是\(1\)连向其他点的的边的字母,而\(0\)为根的树中的点回文串长度为偶数。举点例子吧:点\(2\)的回文串为\(a\)......
  • LeetCode 131. 分割回文串
    题目链接:LeetCode131.分割回文串题意:给你一个字符串s,请你将s分割成一些子串,使每个子串都是回文串。返回s所有可能的分割方案。回文串是正着读和反着读都一样的字符串。解题思路:dfs算法的过程其实就是一棵递归树,所有的dfs算法的步骤大概有以下几步:找到中止条件:即......
  • 【学习笔记】Manacher(马拉车)求回文子串
    点击查看目录目录参考资料与图片来源算法思路具体实现例题解题参考资料与图片来源参考博客我觉得这个博客讲的不好,他只讲看规律得到的结论,原因却不说,怪。参考博客2oi-wiki算法思路对于长度可能为奇可能为偶的情况,首先要预处理字符串,在每个字符左右增加一个无关字符#。......
  • [刷题笔记] Luogu P2679 [NOIP2015 提高组] 子串
    ProblemDescription我们可以换个思路。从字符串\(A\)中拿出\(k\)个字串使其变成\(B\)。求有几种不同的方案?Analysis我们发现\(A\)中的一个字符取或者不取影响后面的决策,这并不代表它一定有后效性,我们可以记录这一层状态。和最长公共子序列同理,定义\(f_{i,j,k,l}(\fo......
  • python判断字符串是否包含子串的五种方法
    python判断字符串是否包含子串的五种方法一、用find()方法判断要判断某一个字符串是否包含某一个子串,方法之一是可以利用python内置的字符串方法find()来查找,如果查找到,就返回子串第一个字符在原字符串中的索引位置,如果找不到,则返回-1,实例代码如下:>>>string='笨鸟工具,x1y1z1......