class Solution:
def longestPalindromeSubseq(self, s: str) -> int:
n = len(s)
if n == 1:
return n
dp = [[0] * n for _ in range(n)]
for i in range(n - 1, -1, -1):
for j in range(i, n):
if i == j: #对角线
dp[i][j] = 1
continue
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]