动态规划--计算字符串距离

来源:互联网 发布:网络公开课 编辑:程序博客网 时间:2024/06/07 01:11

题目大概:

给出两个字符串,可以对字符串进行替换,删除,增添,使得这两个字符串一样,问最少需要几步。

思路:

dp题。

刚读完题,感觉这个题好熟悉。

两数组为a[i],,,b[i]。

dp[i][j]记录a数组i长度,b数组j长度是的最少步骤。

1.....当a[i]==b[j]时,dp[i][j]==dp[i-1][j-1]

2.....当不相等时,dp[i][j]=min(dp[i-1][j-1]+1,dp[i-1][j]+1,dp[i][j-1]+1),这三个数的第一个代表了替换,剩下的两个带别了删除和添加。

感想:

无。

代码:

#include <iostream>#include <string>using namespace std;int dp[1001][1001];int main(){int n;cin>>n;for(int i=0;i<n;i++){string a,b;int la,lb;cin>>a>>b;la=a.size();lb=b.size();for(int t=1;t<=la;t++)dp[t][0]=t;for(int t=1;t<=lb;t++)dp[0][t]=t;for(int t=1;t<=la;t++){for(int j=1;j<=lb;j++){    if(a[t-1]==b[j-1]){ dp[t][j]=dp[t-1][j-1];} else {dp[t][j]=min(dp[t-1][j-1]+1,min(dp[t][j-1]+1,dp[t-1][j]+1));}}}cout<<dp[la][lb]<<endl;}    return 0;}


0 0
原创粉丝点击