<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
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]);
}
}