给定两个字符串。
定义三种操作:
1.插入一个字符
2.修改一个字符
3.删除一个字符
求最少几步操作使得第一个字符串变成第二个字符串。
例如:第一个字符串lighten,第二个字符串fighting
fighten (l->f) 修改
fightin (e->i) 修改
fighting (->g) 插入
一共三步
第一行为一个字符串s(1<=|s|<=1000)。
第二行为一个字符串t(1<=|t|<=1000)。
(保证字符串里只含小写字母。)
输出s到t的最短编辑距离。
lighten fighting
3
这是用js-v8写的,感觉写的好幸酸,js没有二维数组。
js要使用readline()读取单行输入,用print输出。
var a=readline();
var b=readline();
var m=a.length;
var n=b.length;
//生成二维数组方法
function DArray(rowLength, colLength) {
var dArray = new Array(rowLength);
for (var i = 0; i < rowLength; i++) {
dArray[i] = new Array(colLength);
}
return dArray;
}
var arr =DArray(m+1,n+1);
arr[0][0]=0;
for(let i=1;i<=m;i++){
arr[i][0]=i;
}
for(let j=1;j<=n;j++){
arr[0][j]=j;
}
for(var i=1;i<=m;i++){
for(var j=1;j<=n;j++){
if(a[i-1]==b[j-1]){
arr[i][j]=arr[i-1][j-1];
}else{
arr[i][j]=Math.min(arr[i-1][j]+1,
arr[i][j-1]+1,
arr[i-1][j-1]+1);
}
}
}
print(arr[m][n]);