问题描述
Given two words word1 and word2, find the minimum number of steps required to convert word1 to word2. (each operation is counted as 1 step.)
You have the following 3 operations permitted on a word:
a) Insert a character
b) Delete a character
c) Replace a character
思路
将word1转化为目标串word2,题中给了我们三种操作,分别是:
- 插入一个字符
- 删除一个字符
- 替换一个字符
这是一道典型的动态规划(DP)问题,我们可以设,i
,j
分别是word1和word2的下标。为了后边后续的表述以及代码的可读性,我们的下标以1为开始。
定义dp[i][j] 表示word1[1…i]这个子串转换为word2[1…j]这个子串所需要的最少操作数。
从而我们可以知道:
- dp[0][j] = j;
- dp[i][0] = i;
- if (word1[i] == word2[j]) dp[i][j] = dp[i-1][j-1];
- if (word1[i] != word2[j]) dp[i][j] = min(dp[i-1][j-1], dp[i][j-1], dp[i-1][j]) + 1;
其中min中的,dp[i-1][j-1]对应替换一个字符,dp[i][j-1]对应插入一个字符,dp[i-1][j]对应删除一个字符。
Code
|
|