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-最长回文相关推荐

  1. LeetCode 5. 最长回文子串(动态规划)

    文章目录 1. 题目 2. 解题 2.1 自己写的DP 2.2 优化后的DP 2.3 中心扩展法 1. 题目 给定一个字符串 s,找到 s 中最长的回文子串.你可以假设 s 的最大长度为 1000. ...

  2. LeetCode 516. 最长回文子序列(动态规划)

    1. 题目 给定一个字符串s,找到其中最长的回文子序列.可以假设s的最大长度为1000. 示例 1: 输入: "bbbab" 输出: 4 一个可能的最长回文子序列为 "b ...

  3. [动态规划|字符串] leetcode 5 最长回文子串

    [动态规划|字符串] leetcode 5 最长回文子串 1.题目 题目链接 给定一个字符串 s,找到 s 中最长的回文子串.你可以假设 s 的最大长度为 1000. 示例1: 输入: "b ...

  4. leetcode 5. 最长回文子串 暴力法、中心扩展算法、动态规划,马拉车算法(Manacher Algorithm)

    给定一个字符串 s,找到 s 中最长的回文子串.你可以假设 s 的最大长度为 1000.示例 1: 输入: "babad" 输出: "bab" 注意: &quo ...

  5. 120. Leetcode 516. 最长回文子序列 (动态规划-子序列问题)

    步骤一.确定状态: 确定dp数组及下标含义 dp[i][j]表示的是字符串s在[i, j]范围内最长的回文子序列的长度为dp[i][j] 步骤二.推断状态方程: 如果当前的s[i] == s[j], ...

  6. LeetCode 05最长回文子串

    题目描述 描述: 给定一个字符串 s,找到 s 中最长的回文子串.你可以假设 s 的最大长度为 1000. 示例 1: 输入: "babad" 输出: "bab" ...

  7. Leetcode 516.最长回文子序列

    Time: 20190906 Type: Medium 题目描述 给定一个字符串s,找到其中最长的回文子序列.可以假设s的最大长度为1000. 示例 1: 输入: "bbbab" ...

  8. leetcode - 516. 最长回文子序列

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

  9. leetcode题解5-最长回文子串

    问题描述 给你一个字符串 s,找到 s 中最长的回文子串. 示例 1: 输入:s = "babad" 输出:"bab" 解释:"aba" 同 ...

  10. 20200118:(leetcode)最长回文子串(中心扩展算法详解及思考)

    最长回文子串(中心扩展算法详解及思考) 题目 中心扩展算法详解 代码实现 题目 给定一个字符串 s,找到 s 中最长的回文子串.你可以假设 s 的最大长度为 1000. 示例 1: 输入: " ...

最新文章

  1. IOS 多线程的一些总结
  2. python常见异常
  3. __call__ 可调用对象
  4. Linux学习之Vim编辑器
  5. JavaWeb常用的操作
  6. 玩转spring MVC(九)---Spring Data JPA
  7. navicat 只对比一张表的数据_Excel VBA批量新建工作表(对比数据透视表的使用)...
  8. 转list_quot;quot;转 Int,{} 转 List,还有什么奇葩的 JSON 要容错?| 实战
  9. 文字转语音功能,MacOS只需两行代码
  10. php颜色淡入代码,JavaScript_jquery 淡入淡出效果的简单实现,样式:复制代码 代码如下:nbsp - phpStudy...
  11. (最简单)uniapp微信小程序生成二维码图片插件
  12. 免费软件时代的来临!可以媲美金蝶用友的ERP产品,完全免费使用。
  13. CSS常用定位方法(绝对定位、相对定位、固定定位)
  14. 使用C# 开发Pocket PC 应用程序(转)
  15. [ CTF ]天格战队WriteUp-首届数字空间安全攻防大赛(初赛)
  16. EPMS- 让企业应用更加轻便!
  17. python基础之字符串(七)
  18. 通过一张照片,获取照片的地址信息
  19. MacOS VSCode 突然打开黑屏的解决办法
  20. K-Means聚类算法---C++

热门文章

  1. No Debug UInit Device found 问题解决
  2. CODE 薄膜分析设计软件
  3. java版微信朋友圈_java调用个人微信API接口发朋友圈,评论和删除朋友圈
  4. 基于KMeans聚类算法的网络流量分类预测
  5. 配置pppoe服务器
  6. http隐蔽隧道搭建
  7. 使用API进行微信群管理开发
  8. 计算机考研408 - 操作系统 - 核心知识点总结 - 第一章操作系统概述(23考研408大纲)
  9. 雅可比(Jacobi)方法
  10. 微软2013年暑期实习招聘笔试回忆[已补充完整]