题目大概:

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

思路:

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;
}