字符串的距离 version2.0

字符串的距离 version2.0

version1.0: http://www.cnblogs.com/Coder816/p/4155466.html

算法参考于:http://blog.csdn.net/acdreamers/article/details/15502107

        看了一遍,没有看懂,先做个记录。代码如下:


/** 
 * @author nlee
 * @version 2:33:44 PM Dec 18, 2014
 */
package test.algorithm.DistanceOfStrings;

import java.io.*;

public class DistanceOfStrings
{
public static void main(String[] args)
{
String astr = "";
String bstr = "";
int k = 0;
int astrlen = 0;
int bstrlen = 0;
int[][] tdarr;
char[] aArr, bArr;

	BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

	try
	{
		astr = br.readLine();
		bstr = br.readLine();
		k = Integer.parseInt(br.readLine());
	}
	catch (IOException e)
	{
		// TODO Auto-generated catch block
		e.printStackTrace();
	}

	aArr = astr.toCharArray();
	bArr = bstr.toCharArray();

	astrlen = astr.length();
	bstrlen = bstr.length();

	tdarr = new int[astrlen + 1][bstrlen + 1];

	for (int i = 1; i <= astrlen; i++)
	{
		tdarr[i][0] = i * k;
	}

	for (int i = 1; i <= bstrlen; i++)
	{
		tdarr[0][i] = i * k;
	}

	for (int i = 0; i <= astrlen; i++)
	{
		System.out.print("--------  ");
		for (int j = 0; j <= bstrlen; j++)
		{
			System.out.print(tdarr[i][j] + " ");
		}
		System.out.println();
	}

	System.out.println();

	for (int i = 1; i <= astrlen; i++)
	{
		for (int j = 1; j <= bstrlen; j++)
		{
			tdarr[i][j] = Math.min(tdarr[i - 1][j - 1]
						+ Math.abs(aArr[i - 1] - bArr[j - 1]),
					Math.min(tdarr[i][j - 1], tdarr[i - 1][j]) + k);
		}
	}

	for (int i = 0; i <= astrlen; i++)
	{
		System.out.print("========  ");
		for (int j = 0; j <= bstrlen; j++)
		{
			System.out.print(tdarr[i][j] + " ");
		}
		System.out.println();
	}

	System.out.println(tdarr[astrlen][bstrlen]);
}

}

posted @ 2014-12-18 19:33  Coder816  阅读(151)  评论(0编辑  收藏  举报