-->
当前位置:首页 > 题库 > 正文内容

程序填空题:求解编辑距离问题(动态规划法)

Luz4年前 (2021-05-10)题库1036
设A和B是两个字符串。现在要用最少的字符操作次数,将字符串A转换为字符串B。这里所说的字符操作共有3种:
(1)删除一个字符。
(2)插入一个字符。
(3)将一个字符替换另一个字符。

```c++
#include
#include
#include
#include
using namespace std;
#define MAX 201
//问题表示
string a;
string b;
//求解结果表示
int dp[MAX][MAX];
void solve() //求dp
{
int i,j;
for (i=1;i<=a.length();i++)
dp[i][0]=i; //把a的i个字符全部删除转换为b
for (j=1; j<=b.length(); j++)
dp[0][j]=j; //在a中插入b的全部字符转换为b
for (i=1; i<=a.length(); i++)
for (j=1; j<=b.length(); j++)
{
if (a[i-1]==b[j-1])
@@[dp[i][j]=dp[i-1][j-1]](2);
else
dp[i][j]=@@[min(min(dp[i-1][j],dp[i][j-1]),dp[i-1][j-1])+1](2);
}
}
int main()
{ cin>>a>>b;
solve();
printf("%d",dp[a.length()][b.length()]);
return 0;
}
```
### 输入格式:

第一行输入A字符串,第二行输入B字符串。

### 输出格式:

输出最少的字符操作次数。

### 输入样例1:

```in
sfdqxbw
gfdgw
```

### 输出样例1:

```out
4
```







答案:
第1空:dp[i][j]=dp[i-1][j-1]

第2空:min(min(dp[i-1][j],dp[i][j-1]),dp[i-1][j-1])+1

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。