(编辑距离)给定两个字符串,每次操作可以选择删除(Delete)、插入(Insert)、替换(Replace),一个字符,求将第一个字符串转换为第二个字符串所需要的最少操作次数。
试补全动态规划算法:
1.#include <iostream> 2.#include <string> 3.#include <vector> 4.using namespace std; 5. 6.int min(int x,int y,int z){ 7. return min(min(x,y),z); 8.} 9. 10.int edit_dist_dp(string str1,string str2){ 11. int m=str1.length(); 12. int n=str2.length(); 13. vector<vector<int>> dp(m+1,vector<int>(n+1)); 14. 15. for(int i=0;i<=m;i++){ 16. for(int j=0;j<=n;j++){ 17. if(i==0) 18. dp[i][j]=(1); 19. else if(j==0) 20. dp[i][j]=(2); 21. else if((3)) 22. dp[i][j]=(4); 23. else 24. dp[i][j]=1+min(dp[i][j-1],dp[i-1][j],(5)); 25. } 26. } 27. return dp[m][n]; 28.} 29. 30.int main(){ 31. string str1,str2; 32. cin>>str1>>str2; 33. cout<<"Mininum number of operation:" 34. <<edit_dist_dp(str1,str2)<<endl; 35. return 0; 36.}
①处应填( )
j
i
m
n
②处应填( )
j
i
m
n
③处应填( )
str1[i-1]==str2[j-1]
str1[i]==str2[j]
str1[i-1]!=str2[j-1]
str1[i]!=str2[j]
④处应填( )
dp[i-1][j-1]+1
dp[i-1][j-1]
dp[i-1][j]
dp[i][j-1]
⑤处应填( )
dp[i][j] + 1
dp[i-1][j-1]+1
dp[i-1][j-1]
dp[i][j]