Edit Distance
来源:互联网 发布:网络安全设备巡检报告 编辑:程序博客网 时间:2024/05/17 16:13
题目大意:求最短编辑距离。
解题思路,动态规划
用dp[i][j]表示字符串str1的0~i和str2的0~j的最短编辑距离。
dp[i][j]只有3个来源:
1)dp[i - 1][j] + 1表示str1的0~ i - 1和str2的0~j的最短编辑距离 + 1,表示删除str1的第i个字符;
2)dp[i][j - 1] 表示str1的0~i和str2的0~ j - 1的最短编辑距离 + 1,表示删除str2的第j个字符;
3)dp[i - 1][j - 1]表示str1的0~ i - 1和str2的0 ~ j-1的最短编辑距离,若str1[i] !=str2[j],则+1,表示更改str1[i]或者str2[j]
注意初始化工作
class Solution {public: int minDistance(string word1, string word2) { if(word1.size() == 0) return word2.size(); if(word2.size() == 0) return word1.size(); vector<vector<int> > dp(word1.size(), vector<int>(word2.size(), 0)); if(word1[0] != word2[0]) dp[0][0] = 1; for(int i = 1; i < word2.size(); i++) { dp[0][i] = (word1[0] == word2[i] ? i : dp[0][i - 1] + 1); } for(int i = 1; i < word1.size(); i++) { dp[i][0] = (word1[i] == word2[0] ? i : dp[i - 1][0] + 1); } for(int i = 1; i < word1.size(); i++) { for(int j = 1; j < word2.size(); j++) { int temp = min(dp[i - 1][j], dp[i][j - 1]); if(word1[i] == word2[j]) dp[i][j] = min(temp + 1, dp[i - 1][j - 1]); else dp[i][j] = min(temp + 1, dp[i - 1][j - 1] + 1); } } return dp[word1.size() - 1][word2.size() - 1]; }};
0 0
- edit distance
- Edit Distance
- edit distance
- Edit Distance
- Edit Distance
- Edit Distance
- Edit Distance
- Edit Distance
- Edit Distance
- Edit Distance
- Edit Distance
- Edit Distance
- Edit Distance
- Edit Distance
- Edit Distance
- Edit Distance
- Edit Distance
- Edit Distance
- 中国通信网络
- OC的内存管理
- 2014年——任性
- linux grep命令
- C语言版五子棋
- Edit Distance
- UVa 11481 Arrange the Number(容斥原理)
- 五子棋人机对弈
- mysql SQL语句大全
- android 色值透明度计算
- linux repytr命令介绍
- log4j 级别、多文件输出配置
- 【最小割】【bzoj 3894】: 文理分科
- python的对象引用