• 第十八周 Leetcode 72. Edit Distance(HARD) O(N^2)DP


    Leetcode72

    看起来比较棘手的一道题(列DP方程还是要大胆猜想。。)

    DP方程该怎么列呢?

    dp[i][j]表示字符串a[0....i-1]转化为b[0....j-1]的最少距离

    转移方程分三种情况考虑 分别对应三中操作

    因为只需要三个值就可以更新dp[i][j] 我们可以把空间复杂度降低到O(n)

    1. Replace word1[i - 1] by word2[j - 1] (dp[i][j] = dp[i - 1][j - 1] + 1 (for replacement));
    2. Delete word1[i - 1] and word1[0..i - 2] = word2[0..j - 1] (dp[i][j] = dp[i - 1][j] + 1 (for deletion));
    3. Insert word2[j - 1] to word1[0..i - 1] and word1[0..i - 1] + word2[j - 1] = word2[0..j - 1] (dp[i][j] = dp[i][j - 1] + 1 (for insertion)).
      class Solution { 
      public:
          int minDistance(string word1, string word2) {
              int m = word1.length(), n = word2.length();
              vector<int> cur(m + 1, 0);
              for (int i = 1; i <= m; i++)
                  cur[i] = i;
              for (int j = 1; j <= n; j++) {
                  int pre = cur[0];
                  cur[0] = j;
                  for (int i = 1; i <= m; i++) {
                      int temp = cur[i];
                      if (word1[i - 1] == word2[j - 1])
                          cur[i] = pre;
                      else cur[i] = min(pre + 1, min(cur[i] + 1, cur[i - 1] + 1));
                      pre = temp;
                  }
              }
              return cur[m]; 
          }
      }; 
      

        

  • 相关阅读:
    从温设计模式
    php pdf转图片
    PHP 微服务集群搭建
    死磕nginx系列--nginx 限流配置
    分别
    一生悲哀
    三十男人的思考
    test markdown
    linux 系统内核空间与用户空间通信的实现与分析<转>
    ue4 SNew补遗
  • 原文地址:https://www.cnblogs.com/heisenberg-/p/7003846.html
Copyright © 2020-2023  润新知