zoukankan      html  css  js  c++  java
  • LeetCode 编辑距离(DP)

    题目

    给定两个单词 word1 和 word2,计算出将 word1 转换成 word2 所使用的最少操作数 。

    你可以对一个单词进行如下三种操作:

    插入一个字符
    删除一个字符
    替换一个字符

    思路

    定义一个数组dp[i][j]代表第一个字符串前i个字符转换为第二个字符串前j个字符串所需要的缩少操作数。

    如果word1[1] == word2[j],那么dp[i][j] = dp[i - 1][ j - 1]

    不然呢,执行三个操作,分别对应dp[i - 1][j - 1] + 1dp[i - 1][j] + 1dp[i][j + 1]

    本题中,需要额外注意数组的初始化、以及数组的大小。

    class Solution {
    public:
        int minDistance(string word1, string word2) {
            //init
            long long dp[word1.size() + 1][word2.size() + 1];
            memset(dp, 0, sizeof(dp));
            for(int i = 0; i <= word1.size(); i++){
                dp[i][0] = i;
            }
            for(int i = 0; i <= word2.size(); i++){
                dp[0][i] = i;
            }
    
            //dp
            for(int i = 1; i <= word1.size(); i++){
                for(int j = 1; j <= word2.size(); 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], min(dp[i - 1][j], dp[i][j - 1])) + 1;
                }
            }
            return dp[word1.size()][word2.size()];
        }
    };
    
  • 相关阅读:
    yum---Linux软件安装与管理
    Python Cheetah01
    Python 改变字体颜色
    DenyHosts安装及配置
    Python 文件I/O
    Python 列表(List)
    Python 字符串
    Python 循环语句
    Python 条件语句
    Python 系统性能信息模块psutil
  • 原文地址:https://www.cnblogs.com/woxiaosade/p/12376537.html
Copyright © 2011-2022 走看看