{
  "type": "code_options",
  "author": "https://github.com/begeekmyfriend/leetcode",
  "source": "solution.md",
  "exercise_id": "9da825dca95641ec9169bf3ab57db40b",
  "keywords": "字符串,动态规划",
  "title": "编辑距离",
  "desc": [
    {
      "content": "\n<p>给你两个单词 <code>word1</code> 和 <code>word2</code>，请你计算出将 <code>word1</code> 转换成 <code>word2</code><em> </em>所使用的最少操作数 。</p><p>你可以对一个单词进行如下三种操作：</p><ul>\t<li>插入一个字符</li>\t<li>删除一个字符</li>\t<li>替换一个字符</li></ul><p> </p><p><strong>示例 1：</strong></p><pre><strong>输入：</strong>word1 = \"horse\", word2 = \"ros\"<strong><br />输出：</strong>3<strong><br />解释：</strong>horse -> rorse (将 'h' 替换为 'r')rorse -> rose (删除 'r')rose -> ros (删除 'e')</pre><p><strong>示例 2：</strong></p><pre><strong>输入：</strong>word1 = \"intention\", word2 = \"execution\"<strong><br />输出：</strong>5<strong><br />解释：</strong>intention -> inention (删除 't')inention -> enention (将 'i' 替换为 'e')enention -> exention (将 'n' 替换为 'x')exention -> exection (将 'n' 替换为 'c')exection -> execution (插入 'u')</pre><p> </p><p><strong>提示：</strong></p><ul>\t<li><code>0 <= word1.length, word2.length <= 500</code></li>\t<li><code>word1</code> 和 <code>word2</code> 由小写英文字母组成</li></ul>",
      "language": "markdown"
    }
  ],
  "answer": [
    {
      "content": "",
      "language": "cpp"
    }
  ],
  "prepared": [
    [
      {
        "content": "",
        "language": "cpp"
      }
    ],
    [
      {
        "content": "",
        "language": "cpp"
      }
    ],
    [
      {
        "content": "",
        "language": "cpp"
      }
    ]
  ],
  "template": {
    "content": "#include <bits/stdc++.h>\nusing namespace std;\nclass Solution\n{\npublic:\n\tint minDistance(string word1, string word2)\n\t{\n\t\tint l1 = word1.length();\n\t\tint l2 = word2.length();\n\t\tvector<int> dp(l2 + 1);\n\t\tfor (int i = 0; i <= l2; i++)\n\t\t{\n\t\t\tdp[i] = i;\n\t\t}\n\t\tint up = 0;\n\t\tfor (int i = 1; i <= l1; i++)\n\t\t{\n\t\t\tint left_up = dp[0];\n\t\t\tdp[0] = i;\n\t\t\tfor (int j = 1; j <= l2; j++)\n\t\t\t{\n\t\t\t\tup = dp[j];\n\t\t\t\tif (word1[i - 1] == word2[j - 1])\n\t\t\t\t{\n\t\t\t\t\tdp[j] = left_up;\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tdp[j] = 1 + min(left_up, min(up, dp[j - 1]));\n\t\t\t\t}\n\t\t\t\tleft_up = up;\n\t\t\t}\n\t\t}\n\t\treturn dp[l2];\n\t}\n};",
    "language": "cpp"
  },
  "node_id": "dailycode-9f07bfe91c6f4ca484f92a7a49912a66",
  "license": "csdn.net",
  "created_at": 1637894159,
  "topic_link": "https://bbs.csdn.net/topics/600470829"
}