题目链接:https://leetcode.cn/problems/edit-distance/
难度:困难

描述:
给你两个单词 word1word2请返回将 _word1_ 转换成 _word2_ 所使用的最少操作数
你可以对一个单词进行如下三种操作:

  • 插入一个字符
  • 删除一个字符
  • 替换一个字符

提示:
长度:[0, 500]

题解

  1. class Solution:
  2. def minDistance(self, word1: str, word2: str) -> int:
  3. # r[i][j]: word1[:i] -> word2[:j]的最少操作数
  4. # insert: r[i][j] = r[i][j-1] + 1
  5. # delete: r[i][j] = r[i-1][j] + 1
  6. # replace: r[i][j] = r[i-1][j-1] + 1
  7. m, n = len(word1), len(word2)
  8. r = [[0] * (n+1) for _ in range(m+1)]
  9. # "" -> "" = 0
  10. # "" -> word2[:j] = j
  11. # word1[:i] -> "" = i
  12. for j in range(1, n+1):
  13. r[0][j] = j
  14. for i in range(1, m+1):
  15. r[i][0] = i
  16. for i in range(1, m+1):
  17. for j in range(1, n+1):
  18. r[i][j] = min(r[i][j-1], r[i-1][j], r[i-1][j-1]) + 1
  19. if word1[i-1] == word2[j-1]:
  20. r[i][j] = min(r[i-1][j-1], r[i][j])
  21. return r[-1][-1]