字符串的距离 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  阅读(176)  评论(0)    收藏  举报