zoukankan      html  css  js  c++  java
  • LeetCode 72 编辑距离

    LeetCode 72 编辑距离

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

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

    执行用时:4 ms, 在所有 Java 提交中击败了99.63%的用户
    内存消耗:38.9 MB, 在所有 Java 提交中击败了58.80%的用户

    记忆化递归

    class Solution {
        public int minDistance(String word1, String word2) {
            //由word1[0:i] -> word2[0:j]
            int[][] memo = new int[word1.length()][word2.length()];
            int ans = dfs(word1, word2, word1.length()-1, word2.length()-1, memo);
            return ans;
        }
    
        //记忆化递归
        //str1 -> str2
        public int dfs(String str1, String str2, int curr1, int curr2, int[][] memo) {
            //终止条件
            if(curr1<0 || curr2<0) {
                if(curr1<0 && curr2>=0) {
                    //插入
                    return curr2+1;
                } 
                else if(curr1>=0 && curr2<0) {
                    //删除
                    return curr1+1;
                }
                else {
                    return 0;
                }
            }
            //取记忆
            if(memo[curr1][curr2]!=0) {
                return memo[curr1][curr2];
            }
    
            //递归过程(回溯)
            int ans = Integer.MAX_VALUE;
            if(str1.charAt(curr1)==str2.charAt(curr2)) {
                ans = dfs(str1, str2, curr1-1, curr2-1, memo);
            }
            else {
                //1. 替换
                ans = Math.min(ans, 
                    dfs(str1, str2, curr1-1, curr2-1, memo)+1
                );
                //2. 删除
                ans = Math.min(ans, 
                    dfs(str1, str2, curr1-1, curr2, memo)+1
                );
                //3. 插入
                ans = Math.min(ans, 
                    dfs(str1, str2, curr1, curr2-1, memo)+1
                );
            }
            //记忆
            if(memo[curr1][curr2]==0) {
                memo[curr1][curr2] = ans;
            }
    
            //返回值
            return ans;
        }
    }
    
  • 相关阅读:
    用TextKit实现表情混排
    IOS类似9.png
    iphone 弹出键盘,文本框自动向上移动。
    IOS截取部分图片
    IOS给图片增加水印(图片、文字)
    iOS界面设计切图小结
    table tr th td thead tbody tfoot
    怎样让table没有边框
    margin、padding,border默认值
    Java 随机数
  • 原文地址:https://www.cnblogs.com/CodeSPA/p/13677490.html
Copyright © 2011-2022 走看看