首先先来介绍一下最长子序列是什么
按照我的理解,最大子序列首先是两个串中相同的字符组成的,在两个字符串中,相同的字符可以不连续,但是必须字符的下标在字符串中是一次递增的。
举个简单的例子:
String “abdcegs”;
String “wbcasq”;
在这两个串中子序列有“as”,“bcs‘’
最大子序列为“bcs”
这种题我一共遇到两个解法,现在分享出来
第一种解法:递归解决
解法思路:
首先判断两个字符串的第一个字符是否相等
如果相等,则求两个去掉第一个字符的的子序列+1;
如果不相等,则求(去掉第一个字符的第一个字符串与第二个字符串的子序列)和(第一个字符串与去掉第一个字符的第二个字符串的子序列)
代码实现(java)
public static int f(String s1, String s2) {
if(s1.length()==0||s2.length()==0)
return 0;
if(s1.charAt(0)==s2.charAt(0))
return f(s1.substring(1),s2.substring(1))+1;
else
return Math.max(f(s1.substring(1),s2),f(s1,s2.substring(1)));
}
解法二:动态规划
解法思路:
注意:每次字符相同时,需要判断 矩阵[当前位置y轴-1][当前位置x轴-1]的最大值+1;
代码实现(java)
public static