1、问题描述

给定一个字符串(序列),求该序列的最长的回文子序列。

2、分析

需要理解的几个概念:

---回文

---子序列

---子串

http://www.cnblogs.com/LCCRNblog/p/4321398.html这一篇文章描述了利用动态规划求解两个序列的最长公共子序列(Longest Common Sequence)。

假设LCS(X,Y)表示序列X,Y的最长公共子序列,LPS(X)表示X的最长回文子序列;

在设序列X1为X的装置序列(逆序),比如X=“123”,X1=“321”;

则有:

LCS(X,X1) = LPS(X)。

 1 class Solution {
 2 public:
 3     string longestPalindrome(string s) {
 4         string s1(s.rbegin(),s.rend());
 5         //s1.reserve()
 6         //cout << s1 <<endl;
 7
 8         return LCS(s,s1);
 9
10     }
11
12
13     string LCS(string str1,string str2)
14     {
15
16         int length1,length2;
17         //int** arr;
18         const int row=110;
19         const int col=110;
20         int arr[row][col];
21
22         length1 = str1.length();
23         length2 = str2.length();
24
25         memset(arr,0,sizeof(arr));
26         for (int i=1;i<=length1;i++)
27         {
28             for (int j=1;j<=length2;j++)
29             {
30                 if (str1[i-1] == str2[j-1])//这里为什么要用i-1,j-1,因为str中的下标从0开始
31                 {
32                     arr[i][j]=arr[i-1][j-1]+1;
33                 }
34                 else
35                 {
36                     arr[i][j]=(arr[i-1][j] > arr[i][j-1]?arr[i-1][j]:arr[i][j-1]);
37                 }
38             }
39         }
40         //cout << arr[length1][length2]<<endl;
41
42         //打印其中一个最长子序列
43         string print="";
44         for (int i=length1,j=length2;i>=1&&j>=1;)//这里是倒序打印的
45         {
46             if (str1[i-1] == str2[j-1])
47             {
48                 //cout << str1[i-1]<<" ";//按照这样会倒序打印
49                 print = str1[i-1]+print;
50                 i--;
51                 j--;
52             }else
53             {
54                 if(arr[i][j -1] >= arr[i - 1][j])j--;
55                 else
56                     i--;
57
58             }
59
60         }
61         return print;
62
63     }
64
65 };

转载于:https://www.cnblogs.com/LCCRNblog/p/4444058.html

动态规划求一个序列的最长回文子序列(Longest Palindromic Substring )相关推荐

  1. [译+改]最长回文子串(Longest Palindromic Substring) Part II

    [译+改]最长回文子串(Longest Palindromic Substring) Part II 原文链接在http://leetcode.com/2011/11/longest-palindro ...

  2. Leetcode 5. 最长回文子串(Longest Palindromic Substring)

    推荐理由:暴力解法太 naive,中心扩散不普适,Manacher 就更不普适了,是专门解这个问题的方法.而用动态规划我认为是最有用的,可以帮助你举一反三的方法. 补充说明:Manacher 算法有兴 ...

  3. 怎么判断一个字符串的最长回文子串是否在头尾_最长回文字串/子序列问题(leetcode5,9,519)

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

  4. 【leetcode】【动态规划】最长回文子序列

    [leetcode]最长回文子序列 题目 代码 leetcode题目地址 题目 给你一个字符串 s ,找出其中最长的回文子序列,并返回该序列的长度. 子序列定义为:不改变剩余字符顺序的情况下,删除某些 ...

  5. 动态规划:最长回文子串 最长回文子序列

    一.题目 所谓回文字符串,就是一个字符串,从左到右读和从右到左读是完全一样的,比如 "a"."aba"."abba". 对于一个字符串,其子 ...

  6. 动态规划练习——最长回文子序列

    题目 力扣原题链接:最长回文子序列 给你一个字符串 s ,找出其中最长的回文子序列,并返回该序列的长度. 子序列定义为:不改变剩余字符顺序的情况下,删除某些字符或者不删除任何字符形成的一个序列. 示例 ...

  7. leetcode516. 最长回文子序列(动态规划)

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

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

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

  9. 动态规划——最长回文子序列

    题目简略如下: 给出一个字符串s,求s中的最长回文子序列的长度. 例如:在absbzaz中,最长的回文子序列就是absba,长度为5 如上图所示:此时的dp数组应该分情况讨论了: 最简单的一种情况:当 ...

最新文章

  1. DIKW体系(Data-Information-Knowlege-Wisdom)
  2. 中国枳实提取物市场营销模式建议与竞争格局展望报告2022年
  3. 结合传统与数字技术,构建逼真的机械设计
  4. 简单的动画函数封装(2)
  5. mysql5.7 only_full_group_by_Mysql5.7及以上版本 ONLY_FULL_GROUP_BY报错的解决方法
  6. MySQL数据库是非关系_MySQL(数据库)基础知识、关系型数据库yu非关系型数据库、连接认证...
  7. 第 1-5 课:深入了解 Java 中的异常处理 + 面试题
  8. 物联网项目--基于RFID的智能咖啡馆(Visual Studio+物联网虚拟仿真实验平台)
  9. C语言 游戏远程call调用,创建远程线程 调用游戏所有call
  10. Image Style Transfer:多风格 TensorFlow 实现
  11. K - 最少拦截系统(动态规划)
  12. cvLaplace() 拉普拉斯变换
  13. 图像处理MATLAB③(Roberts算子边缘检测,膨胀,滤波,腐蚀,开运算,闭运算使用方法)
  14. vscode 报Open a folder or workspace... (File -> Open Folder)解决办法
  15. _ETHREAD断链 —— 实现线程隐藏
  16. 纯真ip php,PHP利用纯真数据库获取访客IP物理地址
  17. FFmpeg支持QUIC
  18. 网游中针对网络延迟的优化
  19. jump-game(跳跃游戏)
  20. 怎么用geany编辑python_Geany怎么使用,Geany安装使用教程

热门文章

  1. feign接口调用出现连接超时
  2. ASP.NET知识结构
  3. 高级PHP工程师所应该具备的专业素养
  4. http://www.a.cn/?a.b=1 取a.b的值
  5. windows 下安装Python easy_install 和pip
  6. 背后的故事之 - 快乐的Lambda表达式(二)
  7. 微软游戏开发工具XNA 2.0[转自驱动之家]
  8. 百度OCR文字识别API使用心得 com.baidu.ocr.sdk.exception.SDKError[283604]
  9. Android 设置定时刷新页面数据,最小自动刷新时间
  10. Android View生命周期