hrbust-1289-编辑距离(dp)
dp想不太出来,参考大神代码
dp[i][j]表示a的前i个和b的前j个相同后的最短距离
int insert=dp[i][j-1]+1;//插入 int deletes=dp[i-1][j]+1;//删除
int replace;//替换
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
int dp[111][111];//dp[i][j]表示a的前i个和b的前j个相同后的最短距离
int main()
{
char a[111];
char b[111];
while (scanf("%s%s",a,b)!=EOF)
{
int la=strlen(a);
int lb=strlen(b);
for(int i=1; i<=la; i++)
dp[i][0]=i;
for(int j=1; j<=lb; j++)
dp[0][j]=j;
for(int i=1; i<=la; i++)
{
for(int j=1; j<=lb; j++)
{
int insert=dp[i][j-1]+1;//插入
int deletes=dp[i-1][j]+1;//删除
int replace;//替换
if(a[i-1]==b[j-1])
replace=dp[i-1][j-1];
else
replace=dp[i-1][j-1]+1;
dp[i][j]=min(min(insert,deletes),replace);//找到最小的
}
}
printf("%d\n",dp[la][lb]);
}
return 0;
}