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;
}
本文通过一个具体的示例深入探讨了如何使用动态规划解决编辑距离问题。通过详细的代码解释了如何计算两个字符串之间的最短编辑距离,即进行插入、删除或替换操作所需的最少次数。
464

被折叠的 条评论
为什么被折叠?



