字符串的距离 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]); }
}