zoukankan      html  css  js  c++  java
  • lintcode-119-编辑距离

    119-编辑距离

    给出两个单词word1和word2,计算出将word1 转换为word2的最少操作次数。
    你总共三种操作方法:

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

    样例

    给出 work1="mart" 和 work2="karma"
    返回 3

    标签

    字符串处理 动态规划

    思路

    使用动态规划,用二维数组dp[i][j]表示第一个字符串到i第二个字符串到j的时候需要进行多少次修改
    动态转移方程为:
    dp[i][j] = dp[i-1][j-1] + dp[i-1][j] (S[i]==T[j])
    dp[i][j] = dp[i-1][j] (S[i]!=T[j])
    过程如下:

    code

    class Solution {
    public:    
        /**
         * @param word1 & word2: Two string.
         * @return: The minimum number of steps.
         */
        int minDistance(string word1, string word2) {
            // write your code here
            int size1 = word1.size(), size2 = word2.size(),i = 0, j = 0;
            if(size1 <= 0 ) {
                return size2;
            }
            else if(size2 <= 0) {
                return size1;
            }
    
            vector<vector<int> > dp(size1+1, vector<int>(size2+1, 0));
            for(i=1; i<=size1; i++) {
                dp[i][0]= i;
            }
            for(i=1; i<=size2; i++) {
                dp[0][i] = i;
            }
            for(i=1; i<=size1; i++) {
                for(j=1; j<=size2; j++) {
                    if(word1[i-1] == word2[j-1]) {
                        dp[i][j] = dp[i-1][j-1];
                    }
                    else {
                        dp[i][j] = findMin(dp[i-1][j-1], dp[i][j-1], dp[i-1][j])+1;
                    }
                }
            }
            
            return dp[size1][size2];
        }
        
        int findMin(int num1, int num2, int num3) {
            int min = num1 > num2 ? num2 : num1;
            return min > num3 ? num3 : min;
        }
    };
    
  • 相关阅读:
    loushang框架的开发中关于BSP的使用,将写好的功能模块部署到主页界面结构上
    浪潮“楼上”开发平台简介
    New博客园新的开始!
    python相关
    day20 函数闭包与装饰器
    计算机基础
    day19 生成器函数
    简历
    day18 迭代器
    数据库基础(代码)
  • 原文地址:https://www.cnblogs.com/libaoquan/p/7208623.html
Copyright © 2011-2022 走看看