| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 数据结构与算法 -> 动态规划——最长回文子序列 -> 正文阅读 |
|
[数据结构与算法]动态规划——最长回文子序列 |
题目简略如下: 给出一个字符串s,求s中的最长回文子序列的长度。 例如:在absbzaz中,最长的回文子序列就是absba,长度为5 如上图所示:此时的dp数组应该分情况讨论了: 最简单的一种情况:当s[i]==s[j]时,此时最大回文序列应该==dp[i+1][j-1]+2==dp[i][j] 另外情况下:?当s[i]!=s[j]时,dp[i][j]应该取决于dp[i][j-1]跟dp[i+1][j]哪个更大 这样的话状态转移方程遍出来了。 这边先给出实现代码:
?OK然后我们来解决代码中比较疑惑的地方: ① 首先dp数组是一个length*length的一个二维数组:然后我们要对其赋初值,可知i是一定要小于j的(可以想象为i为队头指针,j为队尾指针),当i>j的时候dp数组的值为0(子序列不存在当然为0) 当i==j的时候,也就是i j指向同一个字符,dp赋值为1(一个字符本数就是回文) ② 然后比较ex的就是数组遍历的方向了:这边打字不太好说明,我就拿笔写下来了: ? ? ? 。 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/25 17:47:01- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |