import java.util.Scanner;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
// 注意 hasNext 和 hasNextLine 的区别
String str1=in.nextLine();
String str2=in.nextLine();
int m=str1.length();
int n=str2.length();
int[][] dp=new int[m+1][n+1];
//dp[i][j]表示str1前i个与str2前j个字符的最小编辑距离
//结果是dp[m][n];
for(int i=0;i<=m;i++){
dp[i][0]=i;
}
for(int i=0;i<=n;i++){
dp[0][i]=i;
}
for(int i=1;i<=m;i++){
for(int j=1;j<=n;j++){
if(str1.charAt(i-1)==str2.charAt(j-1)){
dp[i][j]=dp[i-1][j-1];
}else{
//两者不相等,需要考虑不同办法取最优
//1. 左边删掉 dp[i-1][j]+1
//2.右边删掉 dp[i][j-1]+1
//3.左边改成右边 dp[i-1][j-1]+1 前面相等即可
dp[i][j]=dp[i-1][j-1]+1;
dp[i][j]= Math.min(dp[i][j], dp[i-1][j]+1);
dp[i][j]= Math.min(dp[i][j], dp[i][j-1]+1);
}
}
}
System.out.println( dp[m][n]);
}
}
还是要定义清楚dp[i][j]

京公网安备 11010502036488号