LCS算法改进

public static void Lcs_Length(String X,String Y,int c[][])
	{
		X=" "+X;
		Y=" "+Y;
		for(int i=1;i<X.length();i++)
		{
			c[i][0]=0;
		}
		for(int j=0;j<Y.length();j++)
		{
			c[0][j]=0;
		}
		for(int i=1;i<X.length();i++)
		{
			for(int j=1;j<Y.length();j++)
			{
				if(X.charAt(i)==Y.charAt(j))
				{
					c[i][j]=c[i-1][j-1]+1;
				}
				else if(c[i-1][j]>=c[i][j-1])
				{
					c[i][j]=c[i-1][j];
				}
				else
				{
					c[i][j]=c[i][j-1];
				}
			}
		}
	}
	public static void Print_Lcs(int c[][],String X,int i,int j)
	{
		if(i==0||j==0)
			return;
		if(c[i][j]==c[i-1][j])
		{
			Print_Lcs(c,X,i-1,j);
		}
		else if(c[i][j]==c[i][j-1])
		{
			Print_Lcs(c,X,i,j-1);
		}
		else
		{
			Print_Lcs(c,X,i-1,j-1);
			System.out.print(X.charAt(i-1)+" ");
		}
			
	}
	public static void main(String[] args)
	{

		String X="ABCBDAB";
		String Y="BDCABA";
		int c[][]=new int[X.length()+1][Y.length()+1];
		Lcs_Length(X,Y,c);
		for(int i=0;i<c.length;i++)
		{
			for(int j=0;j<c[i].length;j++)
				System.out.print(c[i][j]+" ");
			System.out.println();
		}
		Print_Lcs(c,X,X.length(),Y.length());
	}
原文地址:https://www.cnblogs.com/liuhg/p/LCSAlgo.html