zoukankan      html  css  js  c++  java
  • [ Leetcode ] No.72 编辑距离

    题目:
    给你两个单词 word1 和 word2,请你计算出将 word1 转换成 word2 所使用的最少操作数 。
    你可以对一个单词进行如下三种操作:

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

    题解:

    class Solution {
    public:
        int minDistance(string word1, string word2) {
            /**f[i][j]表示word1中的第i个单词,与word2中的第j个单词所需的编辑距离
            1. 如果word1[i] == word2[j],则两者相等,i--; j--;
            2. 如果不相等
             1)若是插入字符,word1[i]与word2[j-1],即f[i][j-1] + 1。
             2)若是删除字符,word1[i-1],与word2[j],即f[i-1][j] + 1。
             3)替换,也是同时f[i-1][j-1] + 1
            3. 比较三种操作,取最小值。
            **/
            int n = word1.size(), m = word2.size();
    
            vector<vector<int>> f(n+1, vector<int>(m+1, 0));
    
            for(int i = 0; i <= n; i++) { // 当word1到第i位,但word2已经结束时
                f[i][0] = i;
            }
            for(int j = 0; j <= m; j++) {
                f[0][j] = j;
            }
            
            for(int i = 1; i <= n; i++) {
                for(int j = 1; j <= m; j++) {
                    f[i][j] = min(f[i-1][j], f[i][j-1]) + 1;
                    // equal
                    if(word1[i-1] == word2[j-1]) f[i][j] = min(f[i][j], f[i-1][j-1]);
                    else f[i][j] = min(f[i][j], f[i-1][j-1] + 1);
                }
            }
            
            return f[n][m];
        }
    };
    
  • 相关阅读:
    input输入密码变黑点密文
    清除浮动的几种方法
    const let,console.log('a',a)跟console.log('a'+a)的区别
    Egret Wiing3快捷键
    时间转换成2016/12/29 14:23:09格式
    http status code
    构造函数模式
    Log4net
    Autofac
    WebApi返回Json格式字符串
  • 原文地址:https://www.cnblogs.com/recoverableTi/p/12641406.html
Copyright © 2011-2022 走看看