动态规划 字符串编辑距离

来源:互联网 发布:显卡升级软件下载 编辑:程序博客网 时间:2024/05/21 14:48

字符串编辑距离

这个问题是之前看《编程之法》时遇到的,是典型的动态规划问题,在此记录一下。

我认为解决动态规划问题最关键的一步就是写出“动态规划方程”,如果能够顺利写出,后面的代码也就水到渠成了。

题目如下:

Given two words word1 and word2, find the minimum number of steps required to convert word1 to word2. (each operation is counted as 1 step.)

You have the following 3 operations permitted on a word:

a) Insert a character

b) Delete a character

c) Replace a character

思路:动态规划

动态规划方程:

image

image

#include <string>#include <algorithm>#include <iostream>using namespace std;class Solution{public:  int minDistance(string word1, string word2);};int Solution::minDistance(string word1, string word2){  int len1 = word1.size();  int len2 = word2.size();  int dp[len1 + 1][len2 + 1];  for(int i = 0; i <= len1; ++i)  {    dp[i][0] = i;  }  for(int j = 0; j <= len2; ++j)  {    dp[0][j] = j;  }  int insert_act = 0;  int delete_act = 0;  int modify_act = 0;  for(int i = 1; i <= len1; ++i)  {    for(int j = 1; j <= len2; ++j)    {      if(word1[i - 1] == word2[j - 1])      {        dp[i][j] = dp[i - 1][j - 1];      }      else      {        insert_act = dp[i][j - 1] + 1;        delete_act = dp[i - 1][j] + 1;        modify_act = dp[i - 1][j - 1] + 1;        dp[i][j] = min(min(insert_act, delete_act), modify_act);      }    }  }  return dp[len1][len2];}
原创粉丝点击