动态规划-leetcode#10-最长回文
class Solution {
public://思路是,循环,i是字符串终止位置,j是字符串起始位置,//一开始担心,dp[j+1][i-1]会超过数组长度,越界,但是其实,走到这个else时候//j+1小于i,所以可以加1,i-1是前一轮迭代的结果,已经有了。//定义一个dp记录是不是回文,然后通过i-j+1的长度来更新res。//string.substr(起始位置,长度);而不是终止位置。//二维vector<>的初始化:vector<vector<bool>> dp(s.length(),vector<bool>(s.length(),false));string longestPalindrome(string s) {if(s.length()<=1) return s;vector<vector<bool>> dp(s.length(),vector<bool>(s.length(),false));string res= "";// 第二个变量是长度。for(int i=0;i<s.length();i++){for(int j=0;j<=i;j++){if(i==j) dp[j][i]=true;else if (i==j+1) dp[j][i]=(s[i]==s[j]);else{if(s[i]==s[j] && dp[j+1][i-1])dp[j][i]=true;}if( dp[j][i] && i-j+1>res.length()) res=s.substr(j,i-j+1);}}return res;}};
动态规划,挨个位置找,把一头,比如i代表字符串终止位置,就是以s[i]结尾的字符串,dp[i][j]就是从j开始到i的字符串是不是回文:
(1)如果i==j,说明长度为1,true
(2)如果j=i-1;说明挨着,那就比较s[i]和s[j],相等就是回文
(3) 如果i-j距离大于等于2,是不是要对称地方挨个比呢,s[i-1]和s[j+1],s[i-2] 和s[j+2],直到相遇,但是dp已经存好了,走到以s[i]结尾的,那么以s[i-1]结尾的是否是回文已经存在dp中了,所以直接获取就可以,比较s[i]==s[j] && dp[i-1][j+1],为true了,那么就是回文。
在每次求出j-i是不是回文的过程种,通过substr可以更新全局最长回文。
动态规划-leetcode#10-最长回文相关推荐
- LeetCode 5. 最长回文子串(动态规划)
文章目录 1. 题目 2. 解题 2.1 自己写的DP 2.2 优化后的DP 2.3 中心扩展法 1. 题目 给定一个字符串 s,找到 s 中最长的回文子串.你可以假设 s 的最大长度为 1000. ...
- LeetCode 516. 最长回文子序列(动态规划)
1. 题目 给定一个字符串s,找到其中最长的回文子序列.可以假设s的最大长度为1000. 示例 1: 输入: "bbbab" 输出: 4 一个可能的最长回文子序列为 "b ...
- [动态规划|字符串] leetcode 5 最长回文子串
[动态规划|字符串] leetcode 5 最长回文子串 1.题目 题目链接 给定一个字符串 s,找到 s 中最长的回文子串.你可以假设 s 的最大长度为 1000. 示例1: 输入: "b ...
- leetcode 5. 最长回文子串 暴力法、中心扩展算法、动态规划,马拉车算法(Manacher Algorithm)
给定一个字符串 s,找到 s 中最长的回文子串.你可以假设 s 的最大长度为 1000.示例 1: 输入: "babad" 输出: "bab" 注意: &quo ...
- 120. Leetcode 516. 最长回文子序列 (动态规划-子序列问题)
步骤一.确定状态: 确定dp数组及下标含义 dp[i][j]表示的是字符串s在[i, j]范围内最长的回文子序列的长度为dp[i][j] 步骤二.推断状态方程: 如果当前的s[i] == s[j], ...
- LeetCode 05最长回文子串
题目描述 描述: 给定一个字符串 s,找到 s 中最长的回文子串.你可以假设 s 的最大长度为 1000. 示例 1: 输入: "babad" 输出: "bab" ...
- Leetcode 516.最长回文子序列
Time: 20190906 Type: Medium 题目描述 给定一个字符串s,找到其中最长的回文子序列.可以假设s的最大长度为1000. 示例 1: 输入: "bbbab" ...
- leetcode - 516. 最长回文子序列
516. 最长回文子序列 -------------------------------------------- 给定一个字符串s,找到其中最长的回文子序列.可以假设s的最大长度为1000. 示例 ...
- leetcode题解5-最长回文子串
问题描述 给你一个字符串 s,找到 s 中最长的回文子串. 示例 1: 输入:s = "babad" 输出:"bab" 解释:"aba" 同 ...
- 20200118:(leetcode)最长回文子串(中心扩展算法详解及思考)
最长回文子串(中心扩展算法详解及思考) 题目 中心扩展算法详解 代码实现 题目 给定一个字符串 s,找到 s 中最长的回文子串.你可以假设 s 的最大长度为 1000. 示例 1: 输入: " ...
最新文章
- IOS 多线程的一些总结
- python常见异常
- __call__ 可调用对象
- Linux学习之Vim编辑器
- JavaWeb常用的操作
- 玩转spring MVC(九)---Spring Data JPA
- navicat 只对比一张表的数据_Excel VBA批量新建工作表(对比数据透视表的使用)...
- 转list_quot;quot;转 Int,{} 转 List,还有什么奇葩的 JSON 要容错?| 实战
- 文字转语音功能,MacOS只需两行代码
- php颜色淡入代码,JavaScript_jquery 淡入淡出效果的简单实现,样式:复制代码 代码如下:nbsp - phpStudy...
- (最简单)uniapp微信小程序生成二维码图片插件
- 免费软件时代的来临!可以媲美金蝶用友的ERP产品,完全免费使用。
- CSS常用定位方法(绝对定位、相对定位、固定定位)
- 使用C# 开发Pocket PC 应用程序(转)
- [ CTF ]天格战队WriteUp-首届数字空间安全攻防大赛(初赛)
- EPMS- 让企业应用更加轻便!
- python基础之字符串(七)
- 通过一张照片,获取照片的地址信息
- MacOS VSCode 突然打开黑屏的解决办法
- K-Means聚类算法---C++