最长回文子序列+最长公共子序列+最长连续回文子串
来源:互联网 发布:淘宝男装品牌 知乎 编辑:程序博客网 时间:2024/05/22 06:38
题目:给定一个字符串,找出字符串中的最长回文子序列(也就是说这个回文是里的字符可以是不连续的)
例如:“bbbab”的最长回文是”bbbb”,所以最长回文子序列的长度是4;“cbbd”的最长回文长度是2思路:先求该字符串的逆序串,然后求这两字符串的最长公共子序列(将求最长回文子序列转换成求两个字符串的最长公共子序列)
代码:
此代码利用了(n+1)*(n+1)阶矩阵的思想
public class Solution { public int longestPalindromeSubseq(String s) { int len = s.length(); if(s == null || len == 0 || len == 1){ return len; } int[][] result = new int[len+1][len+1]; StringBuffer sb = new StringBuffer(s); sb = sb.reverse(); String rev = sb.toString(); result[0][0] = 0; //下面两个for循环相当于初始矩阵的第一行第一列,这样后面的行或列才能填充元素 for(int i = 1; i < len+1; i++){ result[0][i] = 0; result[i][0] = 0; } for(int i = 1; i < len+1; i++){ for(int j = 1; j < len+1; j++){ if(s.charAt(i-1) == rev.charAt(j-1)){ result[i][j] = result[i-1][j-1] + 1; }else{ result[i][j] = Math.max(result[i-1][j],result[i][j-1]); } } } return result[len][len]; }}
- 另外一种动态递归的思路(来自LeetCode的Discuss)
- 代码:
public class Solution { public int longestPalindromeSubseq(String s) { int len=s.length(); int[][] dp=new int[len][len]; //初始化数组:子串长度为1的最长回文就是1 for (int i=0;i<len;i++) dp[i][i]=1; for (int d=1;d<len;d++) { //所有长度为d+1的子串最长回文长度 for (int i=0;i<len-d;i++) { int j=i+d; if (s.charAt(i)==s.charAt(j)) dp[i][j]=2+dp[i+1][j-1]; else dp[i][j]=Math.max(dp[i][j-1], dp[i+1][j]); } } return dp[0][len-1]; }}
最长回文子序列+最长公共子序列+最长连续回文子串
动态规划的解法可以参考:
http://blog.csdn.net/v_JULY_v/article/details/6110269
0 0
- 最长回文子序列+最长公共子序列+最长连续回文子串
- 最长回文子串、回文子序列、公共子序列
- 最长公共子串、最长公共子序列、最长递增子序列、最长回文子串
- 最长公共子串、最长公共子序列、最长回文子串、最长回文子序列、回文子串个数
- 最长公共回文子序列
- 最长回文子序列
- 最长回文子序列
- 最长回文子序列
- 最长回文子序列
- 最长回文子序列
- 最长回文子序列
- 最长回文子序列
- 最长回文串子序列
- 最大子序列和,最长递增子序列,最长公共子串,最长公共子序列,字符串编辑距离,最长不重复子串,最长回文子串
- 【DP】 最长公共回文子序列
- 【jzoj4889】【最长公共回文子序列】【字符串】
- 最长公共回文子序列ah
- 回文字符串【最长公共子序列】【DP】
- cocos2dx3.14.1+win10+VS2017环境搭建
- 汇编实验:查找匹配字符串
- ESP8266-12F模块更新固件的方法
- 牛客网[编程题] 页码统计(Java实现)
- 121 Best Time to Buy and Sell Stock
- 最长回文子序列+最长公共子序列+最长连续回文子串
- 二维数组的查找
- 三 羊 献 瑞
- OKHttp使用简介
- linux查看进程
- 重载运算符之友元函数和成员函数
- python dict学习:模拟用户登录行为
- Android 圆形头像 类似QQ
- Android 开源框架Universal-Image-Loader完全解析(一)--- 基本介绍及使用