动态规划之用最少的字符操作将字符串A转换为字符串B

1.试用动态规划算法实现下列问题:设A和B是两个字符串。我们要用最少的字符操作,将字符串A转换为字符串B,这里所说的字符操作包括:

(1)删除一个字符。

(2)插入一个字符。

(3)将一个字符改为另一个字符。

 请写出该算法:

 1 #include <string.h>
 2 #include <iostream>
 3 using namespace std;
 4 /*将字符串A转换为字符串B最少的操作次数*/ 
 5 int minEditDistance(string A,string B)
 6 {
 7     int A_len=A.length();
 8     int B_len=B.length();
 9     int D[B_len+1][A_len+1];
10     D[0][0]=0;
11     for(int i=1;i<=A_len;i++)
12     {
13         D[0][i]=i;
14     } 
15     for(int i=1;i<=B_len;i++)
16     {
17         D[i][0]=i;
18     }  
19     for(int i=1;i<=B_len;i++)
20     {
21         for(int j=1;j<=A_len;j++)
22             D[i][j]=min(min(D[i-1][j]+1,D[i][j-1]+1),(A[j-1]==B[i-1]?D[i-1][j-1]:D[i-1][j-1]+1));
23     } 
24     return D[B_len][A_len];
25 }
26 /*主函数*/
27 int main()
28 {
29     string A,B;
30     cin>>A>>B;
31     cout<<minEditDistance(A,B);
32 }
posted @ 2020-01-04 16:42  侠客小飞  阅读(4517)  评论(0编辑  收藏  举报