题目描述
依旧是字符串处理,设A和B是两个字符串。我们要用最少的字符操作次数,将字符串A转换为字符串B。这里所说的字符操作共有三种:
1.删除一个字符;
2.插入一个字符;
3.将一个字符改为另一个字符。
对任给的两个字符串A和B,计算出将字符串A变换为字符串B所用的最少字符操作次数。
输入举例:
sfdxbqw
gfdgw
输出举例:
4
解法见:
https://blog.csdn.net/ac540101928/article/details/52786435
由矩阵中第一列的字符串得到第一行的字符串
得到矩阵的代码为:
int[][] matrix = new int[str1.length()+1][str2.length()+1];
matrix[0][0] = 0;
for(int i = 1;i<matrix.length;i++){
matrix[i][0]=i;
}
for(int i = 1;i<matrix[0].length;i++){
matrix[0][i]=i;
}
for(int i = 1;i<matrix.length;i++){
for(int j = 1;j<matrix[0].length;j++){
int zuo=matrix[i][j-1]+1;
int shang = matrix[i-1][j]+1;
int equal = 0;
if(str1.charAt(i-1)!=str2.charAt(j-1)){
equal = 1;
}
int zuoshang = matrix[i-1][j-1]+equal;
matrix[i][j] = Math.min(Math.min(zuo,shang),zuoshang);
}
}
其中:
添加:dis[i][j] = 1 + dis[i][j-1];
删除:dis[i][j] = 1 + dis[i-1][j]
替换:dis[i][j] = 1 + dis[i-1][j-1];
若两字符相同,则:dis[i][j] = dis[i-1][j-1]