`
ouqi
  • 浏览: 41853 次
  • 性别: Icon_minigender_2
  • 来自: 北京
社区版块
存档分类
最新评论

[leetcode] edit Distance

 
阅读更多

算法思想 动态规划。

假设字符下标从1开始。

c[i][j] 表示word1[1~i] 到word2[1~j]的最短编辑距离。

则有递推式:

c[i][j] = min(c[i-1][j],c[i][j-1],c[i-1][j-1])+1; if(i >= 1 && j >= 1 && word[i] != word[j])

           c[i-1][j-1];     if(i >= 1 && j >= 1 && word[i] == word[j])         

 当i == 0|| j ==0时,忽略计算上述中的对应项即可。

说明: c[i][j] = c[i-1][j]+1 表示执行的是删除操作;

            c[i][j] = c[i][j-1]+1表示执行的是插入操作;

            c[i][j] = c[i-1][j-1] 在word[i]!=word[j] 时表示执行的是替换操作;

 

代码:

public class Solution {
    /*
    c[m+1][n+1]数组 认为word1,word2的下标都是从1开始。因此取具体字符的时候应该注意是i-1,j-1
    初始化c[0][0] = 0 
    */
    public int minDistance(String word1, String word2) {
        // Start typing your Java solution below
        // DO NOT write main() function
        if(word1 == null||word1.length() == 0) return word2.length();
        if(word2 == null||word2.length() == 0) return word1.length();
        int m = word1.length();
        int n = word2.length();
        
        int c[][] = new int[m+1][n+1];
        
        c[0][0] = 0;
        
        for(int j = 1;j<=n;j++)
            c[0][j]  = j;
        for(int i = 1;i<=m;i++)
            c[i][0] = i;
        for(int i = 1;i<=m;i++)
            for(int j = 1; j<=n;j++){
                int min = c[i-1][j-1];
                if(min>c[i][j-1]) min = c[i][j-1];
                if(min>c[i-1][j]) min = c[i-1][j];
                c[i][j] = min+1;
                if(word1.charAt(i-1) == word2.charAt(j-1)){
                   if(c[i][j] > c[i-1][j-1]) c[i][j] = c[i-1][j-1];
                }
            }
        return c[m][n];
    }
}

 

 

分享到:
评论

相关推荐

    python-leetcode题解之072-Edit-Distance

    python python_leetcode题解之072_Edit_Distance

    c语言-leetcode题解之0072-edit-distance.zip

    c c语言_leetcode题解之0072_edit_distance.zip

    python-leetcode题解之161-One-Edit-Distance.py

    python python_leetcode题解之161_One_Edit_Distance.py

    LeetCode最全代码

    477 | [Total Hamming Distance](https://leetcode.com/problems/total-hamming-distance/) | [C++](./C++/total-hamming-distance.cpp) [Python](./Python/total-hamming-distance.py) | _O(n)_ | _O(1)_ | Medium ...

    Leetcode book刷题必备

    14. One Edit Distance:判断两个字符串是否只差一个字符操作。 15. Read N Characters Given Read4:一次调用 read4() 可以读取 4 个字符,编写一个函数,使其能够读取 n 个字符。 16. Read N Characters Given ...

    _leetcode-python.pdf

    - Edit Distance: 给定两个单词word1和word2,计算将word1转换为word2所使用的最少操作数。 - Set Matrix Zeroes: 给定一个m×n的矩阵,如果一个元素为0,则将其所在行和列的所有元素都变为0。 - Search a 2D Matrix...

    leetcode分类-LeetCode:力码

    Distance Maximum Subarray Minimum Path Sum Unique Paths Unique Paths II Longest Palindromic Substring Interleaving String Triangle Distinct Subsequences Decode Ways Palindrome Partitioning II Maximal ...

    gasstationleetcode-leetcode:LeetcodeOJ解决方案

    leetcode 【演示记录】 报告 展示 2017/03/06 1.二和,167.二和二 2107/03/06 15.3 总和,16.3 总和最近,18.4 总和,11.最多水的容器 2017/03/09 62.Unique Paths, 63.Unique Paths II, 64.Minimum Path Sum 2017/...

    python-leetcode面试题解之第72题编辑距离.zip

    在LeetCode的面试题目中,第72题“编辑距离”(Edit Distance)是一个经典的算法问题,它涉及到了字符串操作、动态规划和递归等编程概念。本题解将深入探讨这个问题的背景、解决方案以及Python实现。 ### 问题背景 ...

    c++-c++编程基础之leetcode题解第72题编辑距离.zip

    标题"**c++-c++编程基础之leetcode题解第72题编辑距离.zip**"指的是一个关于C++编程的学习资源,特别针对LeetCode网站上的第72题“编辑距离”(Edit Distance)的问题。LeetCode是一个在线平台,提供了各种算法题目...

    python-leetcode面试题解之第161题相隔为1的编辑距离-题解.zip

    在本压缩包中,我们关注的是一个Python编程与算法相关的面试题目,具体是LeetCode的第161题,名为“相隔为1的编辑距离”(Edit Distance)。这个题目在求职面试中常被用来测试候选人的编程能力,特别是对字符串操作...

    php-leetcode题解之编辑距离.zip

    编辑距离(Edit Distance)是一种衡量两个字符串相似度的算法,广泛应用于编程竞赛、文本处理、搜索引擎优化等领域。在LeetCode这个知名的在线编程挑战平台上,它是一个经典的算法问题。本资料包是关于使用PHP解决...

    uber leetcode

    #### 十、One Edit Distance - **知识点:**动态规划、字符串比较。 - **题目描述:**给定两个字符串word1和word2,返回使word1和word2相同所需的最小步数。每步可以插入一个字符、删除一个字符或者替换一个字符。 -...

    leetcode中国-Algorithms:算法

    leetcode中国英文翻译正在进行中... 一些文章仍然是中文的,但大部分已经完成。 请为这个 repo 加注星标。 完整的翻译最终将完成。 享受。...这些文章讨论了不同类型的...Programming/EditDistance.md) 【经典DP:超级蛋

    leetcode316-algorithm-code-csharp:C#算法题汇总

    10. LeetCode第1081题:"One Edit Distance"(单编辑距离):判断两个字符串之间是否只需要一次编辑操作(插入、删除或替换)就可以互相转换。 11. LeetCode第1310题:"XOR Queries of a Subarray"(子数组异或查询...

    leetcode正则表达式-DP-7:DP-7

    "Edit Distance"(编辑距离)是动态规划的一个经典应用,通常用于计算两个字符串之间的最小操作次数,使得一个字符串转换成另一个。这些操作可能包括插入、删除和替换字符。"Regular Expression Matching"(正则...

    LeetCode判断字符串是否循环-data-structure-and-algo:C++中的数据结构和算法

    EditDistance(#72) 图 : 集合的合并(直接求并、按大小求并和按深度求并)、根搜寻(路径压缩) : 有向图和无向图的邻接表表示方法 : 图的深度优先和广度优先搜索(假设图用邻接表矩阵表示)、拓扑排序、判断是否有环 ...

    算法导论_编辑距离1

    《算法导论》中的编辑距离(Edit Distance)是一个在计算机科学和信息处理中常见的概念,用于衡量两个字符串之间的差异。编辑距离定义为将一个字符串转换成另一个字符串所需的最少单字符编辑操作次数,这些操作包括...

    常见算法题答案及解析

    14. One Edit Distance:判断两个字符串是否相差一个字符,通常用来判断是否为编辑距离为一的字符串。 15. Read N Characters Given Read4:使用API读取文件中的N个字符,解决读取溢出问题。 16. Read N Characters ...

    3、动态规划必练题(含解法).pdf

    9. **Edit Distance** (编辑距离) 计算两个字符串之间的最小编辑操作次数,包括插入、删除和替换。使用二维动态规划,状态转移方程涉及三种操作。 10. **Distinct Subsequences** (不同的子序列) 统计一个字符串...

Global site tag (gtag.js) - Google Analytics