1.LeetCode 647 回文子串
题目链接:647. 回文子串
class Solution:
def countSubstrings(self, s: str) -> int:
dp = [[False] * len(s) for _ in range(len(s))]
result = 0
for i in range(len(s) - 1, -1, -1):
for j in range(i, len(s)):
if s[i] == s[j]:
if j - i <= 1:
result += 1
dp[i][j] = True
else:
if dp[i + 1][j - 1]:
result += 1
dp[i][j] = True
return result
第一题结束
2.LeetCode 516 最长回文子序列
题目链接:516. 最长回文子序列
class Solution:
def longestPalindromeSubseq(self, s: str) -> int:
dp = [[0] * len(s) for _ in range(len(s))]
for i in range(len(s)):
dp[i][i] = 1
for i in range(len(s) - 1, -1, -1):
for j in range(i + 1, len(s)):
if s[i] == s[j]:
dp[i][j] = dp[i + 1][j - 1] + 2
else:
dp[i][j] = max(dp[i + 1][j], dp[i][j - 1])
return dp[0][-1]
第二题结束
动态规划总结:
牢记动规五部曲即可:
- 确定dp数组(dp table)以及下标的含义
- 确定递推公式
- dp数组如何初始化
- 确定遍历顺序
- 举例推导dp数组
今天用时1h

411

被折叠的 条评论
为什么被折叠?



