您的位置:首页 > 其它

[LeetCode] 72. Edit Distance

2016-08-01 21:05 239 查看
思路:

这题也是没有思路, 看了大神的解答后照猫画虎https://discuss.leetcode.com/topic/17639/20ms-detailed-explained-c-solutions-o-n-space. 动态规划, 首先初始化第一行第一列, 因为这时候只能补字符, 所以就是i和j的大小. 然后, 填补其他方格. 如果word1和word2的当前字符相同, 就找他们各自向前一个字符的距离, 直接取那个值就够了, 因为现在的两个字符相等, 就不用再加了. 如果当前两个字符不相同, 那么就看当前各自的左上, 上方, 左方的格子哪个值比较小, 选小的然后加1即可.

int minDistance(string word1, string word2) {
int m = word1.length(), n = word2.length();
int flags[m + 1][n + 1] = {0};

for (int i = 1; i <= m; i++)
flags[i][0] = i;

for (int j = 1; j <= n; j++)
flags[0][j] = j;

for (int i = 1; i <= m; i++) {
for (int j = 1; j <= n; j++) {
if (word1[i - 1] == word2[j - 1])
flags[i][j] = flags[i - 1][j - 1];
else
flags[i][j] = min(flags[i - 1][j - 1], min(flags[i - 1][j], flags[i][j - 1])) + 1;
}
}

return flags[m]
;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  leetcode ????