【温哥华Snapchat面试攻略】LeetCode 516最长回文子序列Python解法详解
大家好!今天和大家分享我在温哥华Snapchat面试中遇到的经典动态规划问题——**LeetCode 516. 最长回文子序列(Longest Palindromic Subsequence)**的Python解法!
问题描述
给定一个字符串s
,找到其中最长的回文子序列的长度。
注意:子序列不要求连续!
示例:
输入:"bbbab"
输出:4
(最长回文子序列是"bbbb"
)
解题思路:动态规划(DP)
回文问题通常可以用DP高效解决!核心思路是:
- 定义
dp
:表示字符串s
的最长回文子序列长度。 - 状态转移:
- 如果
s == s
,则dp = dp + 2
- 否则,
dp = max(dp, dp)
- 如果
- 初始化:单个字符一定是回文,
dp = 1
Python代码实现
def longestPalindromeSubseq(s: str) -> int:
n = len(s)
dp = * n for _ in range(n)]
for i in range(n-1, -1, -1): # 从后往前遍历
dp = 1 # 单个字符初始化
for j in range(i+1, n):
if s == s:
dp = dp + 2
else:
dp = max(dp, dp)
return dp # 最终结果
复杂度分析
- 时间复杂度:O(n²)
- 空间复杂度:O(n²)(可优化到O(n),留作思考题
)
面试小贴士
- Snapchat等大厂常考DP,建议多练类似题目(如LeetCode 5/647)。
- 温哥华面试官喜欢追问优化思路,提前准备好空间优化版本!
- 记得用例子手动推演DP表,展示逻辑清晰度
如果对你有帮助,欢迎点赞/评论!有问题随时讨论~
#程序员面试 #刷题打卡 #温哥华Tech #动态规划