動態規划之用最少的字符操作將字符串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 }


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM