首页 > 其他分享 >Leetcode 5.最长回文子串(区间dp)

Leetcode 5.最长回文子串(区间dp)

时间:2023-03-18 22:44:57浏览次数:73  
标签:子串 __ length lft range ans Leetcode dp 回文

题目链接在这里:5. 最长回文子串 - 力扣(LeetCode)

首先肯定是个n^2的算法,枚举起点也是必要的,但是枚举终点很显然不行,但是考虑到回文串会向下兼容,因此我们可以枚举长度,这就是典型的区间dp了,从短的子串可以推到长的子串的信息的可以用区间dp做。

 

 1 class solution:
 2     def longest(self,s : str)->str:
 3         ans = 0
 4         lft = rgt = 0
 5         n = len(s)
 6         f=[[False] * n for _ in range(n)]
 7         ans = 1
 8         for i in range(n):
 9             f[i][i] = True
10         for i in range(n-1):
11             if s[i] == s[i+1] :
12                 f[i][i+1] = True
13                 ans = 2
14                 lft = i
15             else:
16                 f[i][i+1] = False
17         for length in range(3, n+1):
18             for i in range(n-length+1):
19                 j = i+length - 1 
20                 # print(i,j)
21                 if s[i] == s[j]:
22                     f[i][j]=f[i+1][j-1]
23                 if f[i][j]==True:
24                     ans = length
25                     lft = i
26         return s[lft: lft+ans]
27 
28 if __name__=="__main__":
29     s = "ccc"
30     an = solution.longest(self=0,s=s)
31     print(an)

 

标签:子串,__,length,lft,range,ans,Leetcode,dp,回文
From: https://www.cnblogs.com/keximeiruguo/p/17232054.html

相关文章

  • leetcode-05 最长回文子串
    题目描述:给你一个字符串 s,找到 s 中最长的回文子串。解法一:中心扩散法思想:令左右指针指向同一个元素,然后向两边扩散,并记录下最长长度(L)以及对应的起始位置(index)......
  • 力扣---1616. 分割两个字符串得到回文串
    给你两个字符串a和b,它们长度相同。请你选择一个下标,将两个字符串都在相同的下标分割开。由a可以得到两个字符串:aprefix和asuffix,满足a=aprefix+asuffix,......
  • 用户数据报协议 UDP
    用户数据报协议UDPUDP概述用户数据报协议UDP只在IP的数据报服务之上增加了很少一点的功能,这就是复用和分用的功能以及查错检测的功能UDP的主要特点UDP是无连......
  • Arm64v8 cpu + Centos7 aarch64中安装 Ambari 2.7.3 和 HDP 3.1.0
    #下载不存在的资源的方法使用迅雷云盘,添加下载任务到云盘,有一定的概率下载到已经被删除的资源。比如下载HDP相关的资源:<http://mirrors.huaweicloud.com/kunpeng/yum......
  • 算法 -- 分割两个字符串得到回文串
    分割两个字符串得到回文串提示中等114相关企业给你两个字符串a和b,它们长度相同。请你选择一个下标,将两个字符串都在相同的下标分割开。由a可以得到两个字符......
  • 剑指Offer49 -- DP/贪心
    1.题目描述丑数2.思路很明显,丑数就是\(2,3,5\)的乘积组合。最一开始,我竟然傻傻的\(dfs\)+\(set\)来求解,其实仔细想想,\(dfs\)肯定是不行的,因为\(dfs\)会......
  • B.小红的子序列(dp)
    B.小红的子序列(dp)题目链接自序列问题一般是dp问题,这里结尾dp状态只有四种,蓝偶,红偶,蓝奇,红奇。对于当前物品,所要做的判断就是加与不加入状态完全相反的背包中,例如,当前是......
  • 代码随想录第二天 | 有序数组的平方_leetcode 长度最小的子数组_leetcode 螺旋矩阵
    有序数组的平方考虑到数组中元素存在负数的情况,数组元素平方之后,最大值存在于新数组的两边,这里采用“双指针法”可以满足时间复杂度为O(n)若对数组中的元素平方之后再去......
  • 说一下线程池内部工作原理(ThreadPoolExecutor)
    ThreadPoolExecutor构造方法的参数corePoolSize:线程池的核心线程数,说白了就是,即便是线程池里没有任何任务,也会有corePoolSize个线程在候着等任务。maximumPoolSize:最大......
  • 【LeetCode贪心#08】根据身高重建队列(还是涉及处理两个维度的信息)
    根据身高重建队列力扣题目链接(opensnewwindow)假设有打乱顺序的一群人站成一个队列,数组people表示队列中一些人的属性(不一定按顺序)。每个people[i]=[hi,ki]表......