目录
题目地址:力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台
题目类型:最长子序列
- class Solution {
- public:
- int minDistance(string word1, string word2) {
- int m = word1.size(), n = word2.size();
- // dp[i][j]代表word1从0....i-1和word2从0......j-1之间最少的步数
- vector
int>> dp(m + 1, vector<int>(n + 1)); - // 初始化
- for (int i = 0; i <= m; ++i) dp[i][0] = i;
- for (int j = 0; j <= n; ++j) dp[0][j] = j;
- for (int i = 1; i <= m; ++i) {
- for (int j = 1; j <= n; ++j) {
- if (word1[i - 1] == word2[j - 1]) dp[i][j] = dp[i - 1][j - 1];
- // 因为要模拟删除元素的操作,所以要加一
- else dp[i][j] = min(dp[i - 1][j] + 1, dp[i][j - 1] + 1);
- }
- }
- return dp[m][n];
- }
- };
题目地址:力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台
题目类型:最长子序列
- class Solution {
- public:
- int minDistance(string word1, string word2) {
- int m = word1.size(), n = word2.size();
- vector
int>> dp(m + 1, vector<int>(n + 1)); - for (int i = 0; i <= m; ++i) dp[i][0] = i;
- for (int j = 0; j <= n; ++j) dp[0][j] = j;
- for (int i = 1; i <= m; ++i) {
- for (int j = 1; j <= n; ++j) {
- // 如果相同则不需要修改
- if (word1[i - 1] == word2[j - 1]) dp[i][j] = dp[i - 1][j - 1];
- else dp[i][j] = min({dp[i][j - 1], dp[i - 1][j], dp[i - 1][j - 1]}) + 1;
- }
- }
- return dp[m][n];
- }
- };