zoukankan      html  css  js  c++  java
  • leetcode

    leetcode 链接:https://leetcode-cn.com/problems/longest-palindromic-substring

    题目:给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。
    
    示例 1:
    
    输入: "babad"
    输出: "bab"
    注意: "aba" 也是一个有效答案。
    示例 2:
    
    输入: "cbbd"
    输出: "bb"
    

    这道题我采用的是中心扩散的方法,分别判断 aca, aabbaa 两种模式,因此进行了两次遍历,时间上不太理想只超越了30%,但是空间上超越了99%,也算是有利有弊。

    官网题解提到了 Manacher 算法 暂时还没有了解,后面学习一下该方法,改进一下。

    题解:

    class Solution:
        def longestPalindrome(self, s: str) -> str:
            result = ''
            slen = len(s)
            if slen == 0:
                return ''
            for i in range(slen):
                li = i-1
                ri = i+1
                cur = s[i]
                for j in range(min(i, slen-i-1)):
                    if li < 0 or ri >= slen:
                        break
                    if s[ri] == s[li]:
                        cur = s[li] + cur + s[ri]
                        li -= 1 
                        ri += 1
                    else:
                        break
                if len(cur) > len(result):
                    result = cur
    
                li = i-1
                ri = i
                cur = ''
                for j in range(min(i, slen-i)):
                    if li < 0 or ri >= slen:
                        break
                    if s[ri] == s[li]:
                        cur = s[li] + cur + s[ri]
                        li -= 1 
                        ri += 1
                    else:
                        break
                if len(cur) > len(result):
                    result = cur
                
            return result
    
  • 相关阅读:
    JavaScript语言和jQuery技术1
    JSP2
    JavaScript语言和jQuery技术2
    MYSQL2
    JSP1
    JSP5
    JSP3
    Spring框架
    JSP4
    MYSQL3(查询)
  • 原文地址:https://www.cnblogs.com/dongyangblog/p/12145634.html
Copyright © 2011-2022 走看看