class Solution:
def longestPalindromeSubseq(self, s: str) -> int:
n = len(s)
dp = [[0] * n for _ in range(n)]
# 初始化:单个字符的最长回文子序列长度为 1
for i in range(n):
dp[i][i] = 1
# 逐步填充 dp 表,从下往上,从左到右
for length in range(2, n+1): # 子串长度
for i in range(n - length + 1):
j = i + length - 1 # 计算区间 [i, j]
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][n-1]
03-27
127

12-23
05-19
852
