开始不知道怎么想的想偏了。。。
很简单的三种情况,第一个字符串+1,第二个字符串+1,两个相同的情况
dp不能想太多,想出,这个数怎么由前面的状态转移而成就行了。想的多,要背锅。
#include <iostream>
#include<bits/stdc++.h>
#define ll long long
using namespace std;
char s[2][1500];
int dp[1500][1100];
int main()
{
cin>>s[0];
cin>>s[1];
int len1=strlen(s[0]);
int len2=strlen(s[1]);
for(int i=0;i<=len1;i++)dp[i][0]=i;
for(int i=0;i<=len2;i++)dp[0][i]=i;
for(int i=1;i<=len1;i++)
for(int j=1;j<=len2;j++)
{
dp[i][j]=min(dp[i-1][j],dp[i][j-1])+1;
dp[i][j]=min(dp[i][j],dp[i-1][j-1]+(s[0][i-1]!=s[1][j-1]?1:0));
}
printf("%d\n",dp[len1][len2]);
}