递归法之最长回文子序列(java)
来源:互联网 发布:浴霸哪个牌子好 知乎 编辑:程序博客网 时间:2024/05/20 22:35
1.如果str的最后一个元素和第一个元素是相同的,则有:lps(0,n-1)=lps(1,n-2)+2;例如字符串序列“AABACACBA”,第一个元素和最后一个元素相同,其中lps(1,n-2)表示红色部分的最长回文子序列的长度;
2.如果str的最后一个元素和第一个元素是不相同的,则有:lps(0,n-1)=max(lps(1,n-1),lps(0,n-2));例如字符串序列“ABACACB”,其中lps(1,n-1)表示去掉第一元素的子序列,lps(0,n-2)表示去掉最后一个元素的子序列。
返回最长回文子序列的长度:
package ddd.lps;public class LPS { public static void main(String args[]) { String string = "ACGTGTCAAAATCG"; System.out.println("最长回文子序列長度为:" + lps(string, 0, string.length() - 1)); } public static int lps(String str, int start, int end) { if (start == end) { return 1; } if (start > end) { return 0; } /* 首尾相同时,则首尾是回文子序列的一部分length+2,lps(str, start + 1, end - 1)表示去掉下标为start和end后的字符串进行递归的到的最长子序列;*/ if (str.charAt(start) == str.charAt(end)) { return lps(str, start + 1, end - 1) + 2; } else { /* 首尾不相同时,lps(str, start + 1, end)表示去掉下标为start后的字符串的最长子序列,lps(str, start, end - 1)表示去掉下标为end后的字符串的最长子序列*/ return max(lps(str, start + 1, end), lps(str, start, end - 1)); } } public static int max(int x, int y) { return (x > y) ? x : y; }}
返回最长回文子序列:
package ddd.lps;public class LPS2 { public static void main(String args[]) { String string = "ACGTGTCAAAATCG"; String result = lps(string, 0, string.length() - 1); System.out.println("最长回文子序列为:" + result); System.out.println("最长回文子序列的长度为:" + result.length()); } public static String lps(String str, int start, int end) { if (start == end) { return str.charAt(end) + ""; } if (start > end) { return ""; } if (str.charAt(start) == str.charAt(end)) { return str.charAt(start) + lps(str, start + 1, end - 1) + str.charAt(end); } else { String right = lps(str, start + 1, end); String left = lps(str, start, end - 1); int max = max(left.length(), right.length()); if (max == left.length()) { return left; } else { return right; } } } public static int max(int x, int y) { return (x > y) ? x : y; }}
1 0
- 递归法之最长回文子序列(java)
- 最长回文子序列 递归算法
- 最长公共子序列(递归法)
- 动态规划之最长回文子序列
- 最长回文子序列的java解法
- 最长回文子序列
- 最长回文子序列
- 最长回文子序列
- 最长回文子序列
- 最长回文子序列
- 最长回文子序列
- 最长回文子序列
- 计算回文子序列(Java语言,穷举法,递归)
- 最长回文子序列(LPS)
- 最长回文子序列(LCS)
- java 蓝桥杯 递归求最长子序列(填空题)
- 最长递归子序列
- 算法导论——动态规划之最长公共子序列(LCS)和最长回文子序列(LPS)
- 【MySQL 5.7 Reference Manual】15.4.5 System Tablespace(系统表空间)
- Windows下cmd进入MySql的命令界面
- 【MySQL 5.7 Reference Manual】15.4.6 InnoDB Data Dictionary(InnoDB数据字典)
- MyEclipse开发Hibernate入门实例
- 用C++画表格
- 递归法之最长回文子序列(java)
- 【MySQL 5.7 Reference Manual】15.4.7 Doublewrite Buffer(双写缓冲)
- 基于opencv源程序的滑动条实现阈值变换
- day11 多线程
- 栈和队列_迷宫问题_栈和回朔法
- 《黑客与画家》系列读书笔记二 “书呆子”
- 【MySQL 5.7 Reference Manual】15.4.8 Undo Logs(Undo日志)
- Android自定义控件之《自定义TextView(支持显示图片)》
- HDU 2426 Interesting Housing Problem(点集不同最大二分图)