最长的公共子序列算法-尝试差异解决方案

时间:2019-03-10 18:01:50

标签: recursion lcs

对于那些不知道问题的人: 给定两个序列,找出两个序列中存在的最长子序列的长度。子序列是指以相同的相对顺序出现,但不一定是连续的序列。例如,“ abc”,“ abg”,“ bdf”,“ aeg”,“ acefg”等是“ abcdefg”的子序列。

我几乎用我的方式解决了该问题,但是对于以下输入,我的代码存在一些特殊问题: “ t”,“ tttt” =结果将为4,这是错误的。 “ tttt”,“ tttt” =结果还可以,但是我不喜欢这种解决方案,所以如果有人有其他想听的方式。

我了解问题所在,但找不到适合我编写算法的解决方案。

这是我的代码:

    public static int lcs(String s, String t) {
    return lcs(s,t,0,0,0,0);
}

private static int lcs(String s, String t, int i, int j, int max,int count) {

    if(i == s.length() || j == t.length()) 
        return Math.max(max, count); 

    if(i != 0 && j != 0 && (s.charAt(i-1) == s.charAt(i) || t.charAt(j-1) == t.charAt(j))) 
        count--; //in case Strings are identical.

    if(s.charAt(i) == t.charAt(j)) 
        count++; 

    max = Math.max(Math.max(lcs(s,t,i,j+1,max,count), lcs(s,t,i+1,j+1,max,count)),lcs(s,t,i+1,j,max,count));
    return max;
}

0 个答案:

没有答案