Dynamic Programming------Largest Common Subsequence

Given two strings str1 and str2. Compute a largest common subsequence.

Suppose the two input string are S1 and S2, which has the length m and n separately.  We can set a two dimension array M[ i ][ j ] to represent the optimal solution of i of length S1 and j of length S2.  We just want to compute the value of M[ m ][ n ]. There are twocases:
One case:
When S1[ i ] = S2[ j ], the M[ i ][ j ] is equal to M[]i-1[j-1] + 1.
Second case:
When S1[ i ] != S2[ j ], the M[ i ][ j ] is equal to the Max(M[i-1][j],M[i][j-1]);
So we can write the recursion function such as below:

recursive formula
We can use a bottom-up dynamic programming to compute each subproblemM[i][j] until we get the value of M[m][n].
import java.io.*;
public class LargestCommonSubsequence{
	public int LCS(char[] x, char[] y){
		int[][] M = new int[x.length][y.length];
		for(int i = 0; i<x.length;i++){
			for(int j = 0; j<y.length;j++){
				int f;
				if((i==0||j==0)&&x[i]==y[j])
					f = 1;
				else if((i==0||j==0)&&x[i]!=y[j])
					f = 0;
				else if(j>0&&i>0&&x[i]==y[j])
					f = M[i-1][j-1]+1;
				else
					f = Math.max(M[i-1][j],M[i][j-1]);
				M[i][j] = f;
			}
		}
		return M[x.length-1][y.length-1];
	}
	public static void main(String[] args){
		LargestCommonSubsequence l = new LargestCommonSubsequence();
		char[] c1 = "ALGORITHMS".toCharArray();
		char[] c2 = "PROGRAMS".toCharArray();
		System.out.println("The largest common subsequence length is: "+ l.LCS(c1,c2));
	}
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值