主要参考的是这个回答:知乎
#include <bits/stdc++.h>
using namespace std;
string a,b;
const int maxn=2005;
int dp[maxn];
int main(){
cin>>a>>b;
int lena=a.size();
int lenb=b.size();
for(int i=0;i<=lenb;i++){
dp[i]=i;
}
for(int i=1;i<=lena;i++){
int tmp=dp[0];
dp[0]=i;
for(int j=1;j<=lenb;j++){
//对第(i,j-1)次循环而言,tmp保存的是dp[i-1][j-1];
//因此对于第(i,j)次循环而言,pre存的是dp[i-1][j-1]
int pre=tmp;
tmp=dp[j];
if(a[i-1]==b[j-1])
dp[j]=pre;
else{
dp[j]=min(min(pre,dp[j-1]),dp[j])+1;
}
}
}
printf("%d\n",dp[lenb]);
}