zoukankan      html  css  js  c++  java
  • leetcode第一刷_Edit Distance

    最小编辑距离。非常经典的问题。今年微软实习生的笔试有一个这个的扩展版,牵扯到模板之类的,当时一行代码也没写出来。

    dp能够非常优雅的解决问题。状态转移方程也非常明白。用pos[i][j]表示word1的前i个字符与word2的前j个字符之间的编辑距离。假设word[i-1]与word[j-1]相等,那pos[i][j]与pos[i-1][j-1]相等,否则的话。依据编辑的几种操作。能够从三种情况中选代替价最小的一种。从word1中删除一个字符?从word2中删除一个字符?改动当中一个?边界也非常easy,一个字符串长度为0时。编辑距离一定是依据还有一个的长度不断添加的。

    写成代码一目了然:

    class Solution {
    public:
        int minDistance(string word1, string word2) {
            int len1 = word1.length(), len2 = word2.length();
            int pos[len1+1][len2+1];
            for(int i=0;i<=len1;i++)
                pos[i][0] = i;
            for(int i=0;i<=len2;i++)
                pos[0][i] = i;
            for(int i=1;i<=len1;i++){
                for(int j=1;j<=len2;j++){
                    if(word1[i-1] == word2[j-1])
                        pos[i][j] = pos[i-1][j-1];
                    else{
                        pos[i][j] = min(pos[i-1][j], min(pos[i-1][j-1], pos[i][j-1]))+1;
                    }
                }
            }
            return pos[len1][len2];
        }
    };


  • 相关阅读:
    使用ForEach循环控制器对返回参数进行多次调用
    html基础
    Eclipse使用github并开启命令行
    vim
    使用Jsoup爬取网站图片
    YUM
    javaagent项目中使用
    Linux基础三---打包压缩&vim&系统的初始化和服务
    linux 基础二---用户群租权限
    Linux 基础一---操作系统&常用命令
  • 原文地址:https://www.cnblogs.com/cynchanpin/p/7264941.html
Copyright © 2011-2022 走看看