Algorithm 查找最长回文子串(非子序列)

Algorithm 查找最长回文子串(非子序列),algorithm,python-3.x,dynamic-programming,palindrome,Algorithm,Python 3.x,Dynamic Programming,Palindrome,我正在做一个Leetcode问题,即查找最长的回文子串 例如,如果输入babad,则输出可以是bab或aba 或 如果输入为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. fo

我正在做一个Leetcode问题,即查找最长的回文子串

例如,如果输入babad,则输出可以是bab或aba

如果输入为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"
错误消息超出了时间限制


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

您并没有过早地打破内部循环,所以在所有情况下,您仍然在做O(n²)工作

假设回文的中心必须有'xx'或'x?x'。其中x是任何出现两次的字符,并且?是任何角色

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