首页 > 其他分享 >5. 最长回文子串

5. 最长回文子串

时间:2024-10-09 23:22:09浏览次数:11  
标签:子串 遍历 return len range str 最长 回文

在这里插入图片描述
思路

首先判断字符串是否是回文,是则直接返回,不是则遍历:

从第一个字符开始遍历,判断对应字符串是否是回文且是不是最大长度
时间复杂度:O(N^3)
动态规划解法:

状态初始化为False

dp[i][j]回文:s[i]=s[j]且[i-1:j-1]也为回文

class Solution(object):
    def longestPalindrome(self, s):
        """
        :type s: str
        :rtype: str
        """
        # if s==s[::-1]:
        #     return s
        # #超限
        # t=''
        # n=''
        # for i in range(len(s)):
        #    for j in range(i+1,len(s)+1):
        #         t=s[i:j]
        #         if t==t[::-1] and len(n)<len(t):
        #             n=t
        # return n
        '''
        动态规划来解:dp[i][j]与dp[i+1][j-1]有关    [i:j]为回文,则s[i]=s[j]且[i-1:j-1]也为回文
        j-i<=1情况:   aba    ab    代表字符串长度为奇、偶情况
        '''
        n=''
        dp=[[False]*len(s) for _ in range(len(s))]
        for i in range(len(s)-1,-1,-1):
            for j in range(len(s)-1,i-1,-1):
                if s[i]==s[j]:
                    if j-i<=1:
                        dp[i][j]=True
                    elif dp[i+1][j-1]:
                        dp[i][j]=True
                if dp[i][j] and (j+1-i)>len(n):
                    n=s[i:j+1]
        return n

标签:子串,遍历,return,len,range,str,最长,回文
From: https://blog.csdn.net/huanxianxianshi/article/details/142764539

相关文章

  • (LeetCode 热题 100) 1143. 最长公共子序列(动态规划dp)
    题目:1143.最长公共子序列思路:经典动态规划dp题型,时间复杂度为0(n^2)。C++版本:classSolution{public:intlongestCommonSubsequence(stringtext1,stringtext2){intn=text1.size(),m=text2.size();//状态f[i][j]表示:text1[0,i]和text2[0......
  • 2024年华为OD笔试机试E卷- 关联子串 (java/c++/python)
    华为OD机试E卷2024真题目录(java&c++&python)本人习惯先看输入输出描述,可以明确知道哪些数据已知,需要去得到什么结果,再代入更有目的性地阅读题干内容,快速理解,所以把输入输出描述放在前面,你可以试下这样阅读对你是否有帮助。输入描述输入两个字符串,分别为题目中描述的......
  • 【模板】回文自动机(PAM)(洛谷P5496)
    #include<bits/stdc++.h>#defineendl'\n'#defineintllusingll=longlong;typedefunsignedlonglongull;usingnamespacestd;voidGordenGhost();constexprllN=5e5+7;namespacePAM{intsize,tot,last;//last:最新插入的字母的编号......
  • [CSP-S 2021] 回文
    算法暴力容易发现双指针可以找到每一个区间\([L,R]\),使得这个区间覆盖\(1\)~\(n\)的每一个数,也即区间外覆盖\(1\)~\(n\)的每一个数,这是\(O(n)\)的考虑判断对于两个数列\(A\),\(B\)显然,在\(A\)中先取出的要在\(B\)中最后取出,所以把\(A\)压入栈......
  • 递归_字符串匹配,最长连续序列
    1:字符串匹配题目链接:LCR137.模糊搜索验证-力扣(LeetCode)可以使用递归的方法来检查 input 是否可以匹配 article。目的是正确处理两种通配符:‘.’和‘*’的匹配规则。defis_match(article:str,input:str)->bool:ifnotinput:returnnotarticle......
  • Leecode热题100-3.无重复字符最长子串
    给定一个字符串 s ,请你找出其中不含有重复字符的 最长 子串 的长度。示例 1:输入:s="abcabcbb"输出:3解释:因为无重复字符的最长子串是"abc",所以其长度为3。示例2:输入:s="bbbbb"输出:1解释:因为无重复字符的最长子串是"b",所以其长度为1。......
  • [NOIP2015 提高组] 子串
    算法状态定义最初显然可以想到\(f[i][j][k]\)表示\(A\)串前\(i\)个,\(B\)串前\(j\)个,分割了\(k\)个子串但是这样无法递推\(k\)维于是加上一位\(f[i][j][k][0/1]\),最后一维表示是否选择\(A\)子串当前这一位,也就可以递推的计算状态转移当前位置不使......
  • 最长上升子序列LIS 详解+变形+拓展
    最长上升子序列(LIS):定义:最长上升子序列(LIS)是一个序列中,找到一个子序列,使得这个子序列的元素是严格递增的,且该子序列的长度最大*子串和子序列的差别:子串: 元素的连续性,必须是相邻的子序列:元素的相对顺序,可以不连续 从实例中来[1,7,5,6,9,2,4]这个数组根据肉眼......
  • 3. 无重复字符的最长子串
    题目描述给定一个字符串s,请你找出其中不含有重复字符的最长子串的长度。示例1:输入:s="abcabcbb"输出:3解释:因为无重复字符的最长子串是"abc",所以其长度为3。示例2:输入:s="bbbbb"输出:1解释:因为无重复字符的最长子串是"b",所以其长度为1。示例......
  • 字符串中洛谷B2124判断字符串是否为回文
     #include<stdio.h>intmain(){  charstr[80];  inti,count=0;  intt=0;   gets(str);//输入   for(i=0;str[i]!='\0';i++)//遇到字符串结束标志'\0'时停止计数    count++;//统计共有多少个字符   for(i=0;i<count/2;i++......