题解 就是按照 y总的 大法写 主要是 求出 转移表达式;
f[i][j]的4种子状态;
1. a[i-1]==b[j-1]此时需要删除掉末尾的a[i]--------------f[i-1][j]+1
2. a[i-1]==b[j];此时需要a末尾增加一个字符b[j]------------f[i][j-1]+1
3. a[i-1]==b[j-1]&&a[i]!=b[j];此时需要将a[i]修改为b[j]----------- f[i-1][j-1]+1
4. a[i-1]==b[j-1]&&a[i]==b[j];此时需要不需要操作---------- f[i-1][j-1]
import java.util.*;
public class Main{
static int N=1010;
static int[][]f=new int[N][N];
public static void main(String[]args){
Scanner sc=new Scanner(System.in);
int n=Integer.parseInt(sc.nextLine().trim());
String A=sc.nextLine();
int m=Integer.parseInt(sc.nextLine().trim());
String B=sc.nextLine();
String ta="x"+A;
char[]cs1=("x"+A).toCharArray();
String tb="x"+B;
char[]cs2=("x"+B).toCharArray();
// System.out.println(Arrays.toString(cs1));
// System.out.println(Arrays.toString(cs2));
for(int i=0;i<=m;i++)f[0][i]=i;
for(int i=0;i<=n;i++)f[i][0]=i;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
f[i][j]=Math.min(f[i-1][j]+1,f[i][j-1]+1);
if(cs1[i]==cs2[j])f[i][j]=Math.min(f[i][j],f[i-1][j-1]);
else f[i][j]=Math.min(f[i][j],f[i-1][j-1]+1);
}
}
System.out.println(f[n][m]);
}
}