给定两个单词 word1 和 word2,找到使得 word1 和 word2 相同所需的最小步数,每步可以删除任意一个字符串中的一个字符。
提示:
给定单词的长度不超过500。
来源:力扣(LeetCode)
动态规划
int
minDistance(char * word1, char * word2)
{
int length1 = strlen (word1);
int length2 = strlen (word2);
int dp[length1 + 1][length2 + 1];
for (int i = 0; i < length1 + 1; i ++)
{
for (int j = 0; j < length2 + 1; j ++)
{
dp[i][j] = 0;
}
}
for (int i = 1; i <= length1; i ++)
{
for (int j = 1; j <= length2; j ++)
{
if (word1[i - 1] == word2[j - 1])
{
dp[i][j] = dp[i - 1][j - 1] + 1;
}
else
{
dp[i][j] = fmax (dp[i - 1][j], dp[i][j - 1]);
}
}
}
int ans = length1 - dp[length1][length2] + length2 - dp[length1][length2];
return ans;
}