Edit Distance
给定两个字符串word1和word2,求最短编辑距离,即通过增删改操作能够使得两个字符串变成一个字符串的最少步骤的步数
根据题意,基于动态规划的思想,dp[i][j]为子串word1[0...i]与子串word2[0...j]的编辑距离,初始化,第一行,dp[0][i] = i;,第一列,dp[i][0] = i,因为,对于第一行,此时的word1的子串为空串,和word2的子串的距离为word1增加字符的个数,而对于第一列,此时的word2为空串,则word1和word2的距离即为word1删除的字符个数,动态转移方程为dp[i][j] = (word1[i - 1] == word2[j - 1] ? dp[i - 1][j - 1] : 1 + min(dp[i - 1][j - 1], min(dp[i - 1][j], dp[i][j - 1])));,即考虑两种情况
若word1的第i个字符和word2第j个字符相等,则无需操作,dp[i][j] = dp[i - 1][j - 1];若word1的第i个字符和word2第j个字符不相等,可以有三种选择,分别为删除一个word1字符、增加一个word1字符和替换一个word1字符,即基于已完成操作步骤数dp[i - 1][j]删除word1一个字符或增加word2一个字符基于已完成操作步骤数dp[i][j - 1]增加word1一个字符或删除word2一个字符和基于已完成操作步骤数dp[i - 1][j - 1]替换word1或word2一个字符,增删改的步骤数都为1,动态转移方程选取最小的一个加上步骤数1最后返回dp[word1.length()][word2.length()]即可
LeetCode