字符串s1通过插入、修改、删除三种操作最少能变换成字符串s2的次数
将两个字符串考虑成两个字符数组,即s1-->char[] char1 = s1.tocharArray。s2-->char[] char2 = s2.tocharArray
将问题转化为子问题:char1的前i个字符转换为char2的前j个字符所需要的最小次数
我们用二维数组表示上述子问题,dp[i][j]表示char1的前i个字符转换为char2的前j个字符所需要的最小次数。
- 当s1的第i个字符等于s2的第j个字符时,dp[i][j] = dp[i-1][j-1]
- 当s1的第i个字符不等于s2的第j个字符时,有三种选择,取三者的最小值即可(最小编辑距离)
- 将s1的第i个字符替换成s2的第j个字符,dp[i][j] = dp[i-1][j-1]+1
- 将s1的第i个字符去掉,dp[i][j] = dp[i-1][j]+1
- 将s2的第j个字符去掉,dp[i][j] = dp[i][j-1]+1
下面考虑边界条件:
- 当s1是空字符串时,将s1转化为s2
- dp[0][j] = dp[0][j-1]+1
- 当s2是空字符串时,将s1转化为s2
- dp[i][0] = dp[i-1][0]+1
完整代码如下: