zoukankan      html  css  js  c++  java
  • leetcode72

     1 class Solution {
     2 private:
     3     int d[100][100];
     4     
     5 public:
     6     int minDistance(string word1, string word2)
     7     {
     8         int len1 = word1.length();
     9         int len2 = word2.length();
    10         
    11         for(int i=0;i<=len1;i++)
    12             d[i][0]= i;
    13         
    14         for(int j=0;j<=len2;j++)
    15             d[0][j]=j;
    16         
    17         for(int i=1;i <=len1;i++)
    18         {
    19             for(int j=1;j<=len2;j++)
    20             {
    21                 int diff;
    22                 if(word1[i-1] == word2[j-1])
    23                     diff = 0 ;
    24                 else
    25                     diff = 1 ;
    26                 int temp = min(d[i-1][j] + 1, d[i][j-1] + 1);
    27                 d[i][j] = min(temp, d[i-1][j-1] + diff);
    28             }
    29         }
    30         return d[len1][len2];
    31     }
    32 };

    这是《趣学算法》一书中4-4节提供的代码,在leetcode上运行,速度比较慢,392ms(5.16%),12.9mb(5.22%)。

    补充一个python的实现:

     1 class Solution:
     2     def minDistance(self, word1: str, word2: str) -> int:
     3         m = len(word1)
     4         n = len(word2)
     5         dp = [[0 for _ in range(n+1)]for _ in range(m+1)]
     6         for j in range(n+1):
     7             dp[0][j] = j
     8         for i in range(m+1):
     9             dp[i][0] = i
    10         for i in range(1,m+1):
    11             for j in range(1,n+1):
    12                 diff = 1 if word1[i-1] != word2[j-1] else 0
    13                 minval = min(dp[i-1][j]+1,dp[i][j-1]+1)
    14                 minval = min(minval,dp[i-1][j-1]+diff)
    15                 dp[i][j] = minval
    16         return dp[m][n]

    240ms,16.4mb

    下面提供leetcode中一个12ms,8.5mb的解决方案:

     1 class Solution {
     2 public:
     3     int minDistance(string word1, string word2) {
     4         int m = word1.length();
     5         int n = word2.length();
     6         vector<int> dp(m+1, 0);
     7         int i, j;
     8         int temp, min;
     9         for(i=0;i<=m;i++)
    10             dp[i] = i;
    11         for(j=1;j<=n;j++)
    12         {
    13             temp = dp[0];
    14             dp[0]++;
    15             for(i=1;i<=m;i++)
    16             {
    17                 min = temp + (word1[i-1]!=word2[j-1]);
    18                 min = (dp[i-1]+1)<min?(dp[i-1]+1):min;
    19                 min = (dp[i]+1)<min?(dp[i]+1):min;
    20                 temp = dp[i];
    21                 dp[i] = min;
    22             }
    23         }
    24         return dp[m];
    25     }
    26 };

    将第二种写法,转化为python语法:

     1 class Solution:
     2     def minDistance(self, word1: str, word2: str) -> int:
     3         m = len(word1)
     4         n = len(word2)
     5         dp = list(range(m+1))
     6         for j in range(1,n+1):
     7             temp = dp[0]
     8             dp[0] += 1
     9             for i in range(1,m+1):
    10                 diff = 1 if word1[i-1] != word2[j-1] else 0
    11                 minval = temp + diff
    12                 minval = min(minval,dp[i-1]+1)
    13                 minval = min(minval,dp[i]+1)
    14                 temp = dp[i]
    15                 dp[i] = minval
    16         return dp[m]

    204ms,12.9mb

  • 相关阅读:
    R语言nest_join()函数
    R语言行/列合并
    ffmpeg 命令将视频转化为图帧
    Natas Wargame Level20 Writeup(会话状态注入/篡改)
    vim简明教程--半小时从入门到精通
    笔记:Spring Cloud Hystrix 异常处理、缓存和请求合并
    【Ecstore2.0】导出问题解决(未导出或导出文件为0字节)
    Android Handler消息处理顺序分析
    着色器语言之变量类型
    Redis源码分析(十一)--- memtest内存检测
  • 原文地址:https://www.cnblogs.com/asenyang/p/10481135.html
Copyright © 2011-2022 走看看