LeetCode 516*. 最长回文子序列(Python)

简介: 给定一个字符串s,找到其中最长的回文子序列。可以假设s的最大长度为1000。

给定一个字符串s,找到其中最长的回文子序列。可以假设s的最大长度为1000。


示例 1:


输入:

"bbbab"

输出:

4


一个可能的最长回文子序列为 "bbbb"。


示例 2:


输入:

"cbbd"

输出:

2


一个可能的最长回文子序列为 "bb"。



思路:


仍然是动态规划。将字符串横竖列开,变成一个二维数组f,f[ i ][ j ]表示 s 的第 i 个字符到第 j 个字符组成的子串中,最长的回文序列长度是多少。


初始状态:对角线字符都是回文,记为 1。


如果 s 的第 i 个字符和第 j 个字符相同:


f[ i ][ j ] = f[i + 1][j - 1] + 2


如果 s 的第 i 个字符和第 j 个字符不同:


f[ i ][ j ] = max(f[i + 1][ j ], f[ i ][j - 1])


然后注意遍历顺序,i 从最后一个字符开始往前遍历,j 从 i + 1 开始往后遍历,保证每个子问题都已经算好了。


最终返回f[0][n - 1]即可。


class Solution(object):
    def longestPalindromeSubseq(self, s):
        """
        :type s: str
        :rtype: int
        """
        length = len(s)
        f = [[0 for i in range(length)] for j in range(length)] 
        for i in range(length-1, -1, -1):
            f[i][i] = 1
            for j in range(i+1, length):
                if s[i] == s[j]:
                    f[i][j] = f[i+1][j-1] + 2
                else:
                    f[i][j] = max(f[i+1][j], f[i][j-1])
        return f[0][length-1]




相关文章
|
存储 算法 数据挖掘
【2023年中国高校大数据挑战赛 】赛题 B DNA 存储中的序列聚类与比对 Python实现
本文介绍了2023年中国高校大数据挑战赛赛题B的Python实现方法,该赛题涉及DNA存储技术中的序列聚类与比对问题,包括错误率分析、序列聚类、拷贝数分布图的绘制以及比对模型的开发。
316 2
【2023年中国高校大数据挑战赛 】赛题 B DNA 存储中的序列聚类与比对 Python实现
|
1月前
|
存储 C++ 索引
最长连续序列(每天刷力扣hot100系列)
本题使用哈希表法求最长连续序列。利用unordered_set存储去重元素,遍历集合时仅当num-1不存在时才作为起点向后扩展,统计连续长度,时间复杂度O(n),空间复杂度O(n)。相比unordered_map更高效,因无需存储值。
|
5月前
|
Go
【LeetCode 热题100】DP 实战进阶:最长递增子序列、乘积最大子数组、分割等和子集(力扣300 / 152/ 416 )(Go语言版)
本文深入解析三道经典的动态规划问题:**最长递增子序列(LIS)**、**乘积最大子数组** 和 **分割等和子集**。 - **300. LIS** 通过 `dp[i]` 表示以第 `i` 个元素结尾的最长递增子序列长度,支持 O(n²) 动态规划与 O(n log n) 的二分优化。 - **152. 乘积最大子数组** 利用正负数特性,同时维护最大值与最小值的状态转移方程。 - **416. 分割等和子集** 转化为 0-1 背包问题,通过布尔型 DP 实现子集和判断。 总结对比了三题的状态定义与解法技巧,并延伸至相关变种问题,助你掌握动态规划的核心思想与灵活应用!
199 1
|
机器学习/深度学习 数据采集 算法
时间序列结构变化分析:Python实现时间序列变化点检测
在时间序列分析和预测中,准确检测结构变化至关重要。新出现的分布模式往往会导致历史数据失去代表性,进而影响基于这些数据训练的模型的有效性。
1440 1
|
6月前
|
存储 数据采集 大数据
Python推导式进阶指南:优雅初始化序列的科学与艺术
本文系统讲解Python推导式的用法与技巧,涵盖列表、字典、集合推导式及生成器表达式。通过代码示例和性能对比,展示推导式在数据结构初始化中的优势:简洁高效、执行速度快30%-50%。文章分析基础语法、核心应用场景(如序列构造、键值对转换、去重运算)及嵌套使用,并探讨使用边界与最佳实践,强调可读性优先原则。最后指出,合理运用推导式能显著提升代码质量和处理效率,同时避免过度复杂化的陷阱。
186 0
|
机器学习/深度学习 算法 数据挖掘
6种有效的时间序列数据特征工程技术(使用Python)
在本文中,我们将探讨使用日期时间列提取有用信息的各种特征工程技术。
428 1
|
9月前
|
存储 索引 Python
Python入门:6.深入解析Python中的序列
在 Python 中,**序列**是一种有序的数据结构,广泛应用于数据存储、操作和处理。序列的一个显著特点是支持通过**索引**访问数据。常见的序列类型包括字符串(`str`)、列表(`list`)和元组(`tuple`)。这些序列各有特点,既可以存储简单的字符,也可以存储复杂的对象。 为了帮助初学者掌握 Python 中的序列操作,本文将围绕**字符串**、**列表**和**元组**这三种序列类型,详细介绍其定义、常用方法和具体示例。
Python入门:6.深入解析Python中的序列
|
机器学习/深度学习 索引 Python
python之序列
python之序列
238 59
|
存储 C++ 索引
Python 序列类型(1)
【10月更文挑战第8天】
139 1
|
存储 编译器 索引
Python 序列类型(2)
【10月更文挑战第8天】
91 0
Python 序列类型(2)

热门文章

最新文章

推荐镜像

更多