用户注册



邮箱:

密码:

用户登录


邮箱:

密码:
记住登录一个月忘记密码?

发表随想


还能输入:200字
云代码 - java代码库

java最长公共子序列、最长升序子序列

2015-03-24 作者: java源代码大全举报

[java]代码库

package com.leejuen.string;

import java.lang.reflect.Array;
import java.util.Arrays;

public class LCS
{
	private Integer len;
	private Object str1;
	private Object str2;
	LCS(String a,String b)
	{
		//iniChar(a.toCharArray(), b.toCharArray());
		str1 = a.toCharArray();
		str2 = b.toCharArray();
	}
	LCS(char[] a,char[] b)
	{
		str1 = a;
		str2 = b;
	}
	LCS(int[] a,int[] b)
	{
		str1 = a;
		str2 = b;
	}
	public int getLCS()
	{
		if(len==null) ini();
		return len;
	}
	private void ini()
	{
		int str1_len = Array.getLength(str1);
		int str2_len = Array.getLength(str2);
		int[][] dp = new int[str1_len+1][str2_len+1];      //初始化dp,java默认数据为0所以不用赋值
		for(int i=1;i<=str1_len;i++)
		{
			for(int j=1;j<=str2_len;j++)
			{
				Object tmp1 = Array.get(str1, i-1);
				Object tmp2 = Array.get(str2, j-1);
				if(tmp1.equals(tmp2))
				{
					dp[i][j] = dp[i-1][j-1]+1;
				}
				else
				{
					dp[i][j] = Math.max(dp[i][j-1], dp[i-1][j]);
				}
			}
		}
		len = dp[str1_len][str2_len];
	}
	//一下是测试:打印4、5
	/*public static void main(String[] args)
	{
		//经典最长公共子序列
		String a = "BDCABA";
		String b = "ABCBDAB";
		System.out.println(new LCS(a,b).getLCS());
		//最长升序子序列
		int[] cc1 = {3,1,5,6,2,7,9};
		int[] cc2 = Arrays.copyOf(cc1, cc1.length);
		Arrays.sort(cc2);
		System.out.println(new LCS(cc1,cc2).getLCS());
	}*/
}
//源代码片段来自云代码http://yuncode.net
			


网友评论    (发表评论)


发表评论:

评论须知:

  • 1、评论每次加2分,每天上限为30;
  • 2、请文明用语,共同创建干净的技术交流环境;
  • 3、若被发现提交非法信息,评论将会被删除,并且给予扣分处理,严重者给予封号处理;
  • 4、请勿发布广告信息或其他无关评论,否则将会删除评论并扣分,严重者给予封号处理。


扫码下载

加载中,请稍后...

输入口令后可复制整站源码

加载中,请稍后...