对于那些不知道问题的人: 给定两个序列,找出两个序列中存在的最长子序列的长度。子序列是指以相同的相对顺序出现,但不一定是连续的序列。例如,“ 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;
}