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]