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;
        }
    }
    
  • 相关阅读:
    总结Spring Set注入方式及对property标签的理解
    spring基于Annotation装配Bean时在bean.xml中添加<context:component-scan>标签报错
    java web(struts2)+python+mysql 的简单实践
    罗辑思维--怎样成为一个高手
    教练助手
    小组作业(第五组)
    个人开发总结
    第五组小组作业
    个人作业
    小组总结
  • 原文地址:https://www.cnblogs.com/CodeSPA/p/13677490.html
Copyright © 2011-2022 走看看