LeetCode编辑距离

LeetCode编辑距离

原题链接地址

  • 解题说明

    本题是一道非常典型的动态规划题

    只有三种操作,代码里面都有描述,非常清晰

    1. 插入一个字符
    2. 删除一个字符
    3. 替换一个字符
  • python代码

    class Solution(object):
      def minDistance(self, word1, word2):
          """
          :type word1: str
          :type word2: str
          :rtype: int
          """
          #典型的动态规划
          dp = [ [-1 for i in range(len(word2) + 1)] for i in range(len(word1) + 1)]
    
          dp[0][0] = 0
    
          for i in range(len(dp)):
              for j in range(len(dp[0])):
                  #插入操作
                  if j > 0:
                      if dp[i][j] == -1:
                          dp[i][j] = dp[i][j-1] + 1
                      else: dp[i][j] = min(dp[i][j], dp[i][j-1]+1)
    
                  #删除操作
                  if  i > 0:
                      if dp[i][j] == -1:
                          dp[i][j] = dp[i-1][j] + 1
                      else: dp[i][j] = min(dp[i][j], dp[i-1][j]+1)
    
                  #修改操作,有点特殊,可能不需要修改
                  if i > 0 and j > 0:
                      if dp[i][j] == -1:
                          if word1[i-1] == word2[j-1]:
                              dp[i][j] = dp[i-1][j-1]
                          else:
                              dp[i][j] = dp[i-1][j-1] + 1
                      else:
                          if word1[i-1] == word2[j-1]:
                              dp[i][j] = min(dp[i-1][j-1], dp[i][j])
                          else:
                              dp[i][j] = min(dp[i-1][j-1]+1, dp[i][j])
          #print dp
    
          return dp[len(word1)][len(word2)]      

猜你喜欢

转载自blog.csdn.net/zycxnanwang/article/details/82146518
今日推荐