其实动态规划的代码还是很好写的。
只要弄清楚状态转移方程,还有状态更新的顺序即可
class Solution:
def longestPalindrome(self, s: str) -> str:
# dp[i][j] 表示是否为最长回文子串,
# dp[i][j] = dp[i+1][j-1] or j-i < 2 if s[i] == s[j]
# = false if !=
max_str = ''
if len(s) == 1: return s
dp = [[False] * len(s) for _ in range(len(s))]
#dp = [[False] * len(s)]*len(s)# 这样每一行的地址都是相同的
for i in range(len(s) - 2, -1, -1):
for j in range(i, len(s)):
dp[i][j] = (s[i] == s[j] and (j - i < 2 or dp[i + 1][j - 1]))
if dp[i][j] and j - i + 1 > len(max_str):
max_str = s[i:j + 1]
print(max_str)
return max_str
这里我想要记录的是我在python代码中的一个问题:
dp = [[False] * len(s) for _ in range(len(s))]
id(dp[0]) = 2569253044096
id(dp[1]) = 2569253089728
和
dp = [[False] * len(s)]*len(s)
id(dp[0]) = 2569253044096
id(dp[1]) = 2569253089728
产生这个问题的原因,我觉得可能跟python的浅拷贝这些内容相关。也非常希望遇到相同问题的人能够一起交流。