Description
Given two words word1 and word2, find the minimum number of operations required to convert word1 to word2.
You have the following 3 operations permitted on a word:
- Insert a character
- Delete a character
- Replace a character
Example 1:
1 | Input: word1 = "horse", word2 = "ros" |
Example 2:
1 | Input: word1 = "intention", word2 = "execution" |
Difficulty: Hard
Code:
1 | class Solution { |
题意
这道题让求从一个字符串转变到另一个字符串需要的变换步骤,共有三种变换方式,插入一个字符,删除一个字符,和替换一个字符。
Solution 1
根据以往的经验,对于字符串相关的题目且求极值的问题,十有八九都是用动态规划 Dynamic Programming 来解,这道题也不例外。
使用动态规划dp[i,j]表示把word1的前i个字符转变成word2的前j个字符所需要的最少步骤。
当word1[i]==word2[j],dp[i+1][j+1]=dp[i][j];
当word1[i]!=word2[j],可以进行插入、删除、替换操作,dp[i+1][j+1]=1+min{dp[i+1][j], dp[i][j+1], dp[i][j]}
- dp[i+1][j]表示在word1位置i后新插入word2位置j上的字符,则word1的前i+1个字符必然要转成word2的前j个字符
- dp[i][j+1]表示将word1位置i上的字符删除,则word1的前i个字符必然要转成word2的前j+1个字符
- dp[i-1][j-1]表示将word1位置i替换为word2位置j上的字符,则word1的前i个字符必然要转成word2的前j个字符
初始值dp[0,k]=dp[k,0]=k
1 | class Solution { |
时间复杂度: O(nm)。
空间复杂度: O(nm)。