美文网首页
动态规划计算最长回文-Python

动态规划计算最长回文-Python

作者: 心阅万物 | 来源:发表于2019-11-12 12:10 被阅读0次

只能用动态规划算法计算最长回文,如下还有优化的空间嘛?
不要扯马拉车,只能用动态规划哈。

class Solution:
    @staticmethod
    def longestPalindrome(s):
        l = len(s)
        result = {}

        def calcPalindrome(x, y):
            # print('x, y:', x, y)
            # print('result:', result)
            key = '{0}-{1}'.format(x, y)
            if key in result:
                return result[key]
            elif x == y:
                result[key] = 1
            elif x > y:
                result[key] = 0
            elif s[x] == s[y]:
                outer = y - x + 1
                inner = calcPalindrome(x + 1, y - 1)
                # print('outer inner:', key, outer, inner)
                if outer - inner == 2:
                    result[key] = outer
                else:
                    result[key] = max(calcPalindrome(x + 1, y), calcPalindrome(x, y - 1))
            else:
                result[key] = max(calcPalindrome(x + 1, y), calcPalindrome(x, y - 1))

            return result[key]

        calcPalindrome(0, l - 1)
        r = ''
        for key, value in result.items():
            arr = key.split('-')
            start = int(arr[0])
            end = int(arr[1])
            if end - start + 1 == value and len(r) < value:
                r = s[start:end + 1]
        return r


s = "jglknendplocymmvwtoxverwrwerw234234werebkekzfdhykknufqdkntnqvgfbahsljkobhbxkvyictzkqjqydczuxjkgecdyhixdttxfqmgksrkyvopwprsgoszftuhawflzjyuyrujrxluhzjvbflxgcovilthvuihzttzithnsqbdxtafxrfrblulsakrahulwthhbjcslceewxfxtavljpimaqqlcbrdgtgjryjytgxljxtravwdlnrrauxplempnbfeusgtqzjtzshwieutxdytlrrqvyemlyzolhbkzhyfyttevqnfvmpqjngcnazmaagwihxrhmcibyfkccyrqwnzlzqeuenhwlzhbxqxerfifzncimwqsfatudjihtumrtjtggzleovihifxufvwqeimbxvzlxwcsknksogsbwwdlwulnetdysvsfkonggeedtshxqkgbhoscjgpiel"
print(Solution.longestPalindrome(s))

相关文章

网友评论

      本文标题:动态规划计算最长回文-Python

      本文链接:https://www.haomeiwen.com/subject/uxwfictx.html