【问题标题】:Finding the longest palindromic substring (not subsequence)找到最长的回文子串(不是子序列)
【发布时间】:2018-05-13 15:02:54
【问题描述】:

我正在做查找最长回文子串的 Leetcode 问题。

例如,如果输入 babad 那么输出可以是 bababa

如果输入是cbbd,那么输出是bb

我很确定我已经弄明白了,这是我的代码...

def longestPalindrome(self, s):

    n = len(s)

    # Empty matrix.
    table = [[False for i in range(n)] for j in range(n)]

    # Identity matrix.
    for i in range(n):
        table[i][i] = True

    max_len = 0
    start = 0
    finish = 0

    for sil in range(2, n+1):
        for i in range(n-sil + 1):
            j = sil + i - 1
            if sil == 2:
                if s[i] == s[j]:
                    table[i][j] = True
                    max_len = j-i
                    start = i
                    finish = j
            else:
                if s[i] == s[j] and table[i+1][j-1]:
                    table[i][j] = True

                    if (j - i) > finish-start:
                        max_len = j - i
                        start = i
                        finish = j

    return s[start:finish+1]

它适用于大多数情况,除非字符串非常长。我正在提交我的代码,但在以下情况下失败了......

"esbtzjaaijqkgmtaajpsdfiqtvxsgfvijpxrvxgfumsuprzlyvhclgkhccmcnquukivlpnjlfteljvykbddtrpmxzcrdqinsnlsteonhcegtkoszzonkwjevlasgjlcquzuhdmmkhfniozhuphcfkeobturbuoefhmtgcvhlsezvkpgfebbdbhiuwdcftenihseorykdguoqotqyscwymtjejpdzqepjkadtftzwebxwyuqwyeegwxhroaaymusddwnjkvsvrwwsmolmidoybsotaqufhepinkkxicvzrgbgsarmizugbvtzfxghkhthzpuetufqvigmyhmlsgfaaqmmlblxbqxpluhaawqkdluwfirfngbhdkjjyfsxglsnakskcbsyafqpwmwmoxjwlhjduayqyzmpkmrjhbqyhongfdxmuwaqgjkcpatgbrqdllbzodnrifvhcfvgbixbwywanivsdjnbrgskyifgvksadvgzzzuogzcukskjxbohofdimkmyqypyuexypwnjlrfpbtkqyngvxjcwvngmilgwbpcsseoywetatfjijsbcekaixvqreelnlmdonknmxerjjhvmqiztsgjkijjtcyetuygqgsikxctvpxrqtuhxreidhwcklkkjayvqdzqqapgdqaapefzjfngdvjsiiivnkfimqkkucltgavwlakcfyhnpgmqxgfyjziliyqhugphhjtlllgtlcsibfdktzhcfuallqlonbsgyyvvyarvaxmchtyrtkgekkmhejwvsuumhcfcyncgeqtltfmhtlsfswaqpmwpjwgvksvazhwyrzwhyjjdbphhjcmurdcgtbvpkhbkpirhysrpcrntetacyfvgjivhaxgpqhbjahruuejdmaghoaquhiafjqaionbrjbjksxaezosxqmncejjptcksnoq"

错误消息是超出时间限制。

这是为什么?我正在做一个动态编程解决方案,这应该是一个公认的答案。

【问题讨论】:

    标签: algorithm python-3.x dynamic-programming palindrome


    【解决方案1】:

    你并没有提前打破你的内部循环,所以在所有情况下你仍然在做 O(n²) 的工作。

    考虑回文必须在其中心有“xx”或“x?x”。其中 x 是出现两次的任何字符,而 ?是任何字符。

    对于某些病态情况,这可能不会改善最坏情况下的运行时间,但至少在您提供的示例中,它应该可以为您节省大量计算。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-10-05
      • 2017-02-25
      • 2011-06-15
      • 1970-01-01
      • 2014-11-12
      • 1970-01-01
      • 1970-01-01
      • 2020-04-14
      相关资源
      最近更新 更多