zoukankan      html  css  js  c++  java
  • LeetCode-72.Edit Distance

    Given two words word1 and word2, find the minimum number of operations required to convert word1 to word2.

    You have the following 3 operations permitted on a word:

    1. Insert a character
    2. Delete a character
    3. Replace a character

    Example 1:

    Input: word1 = "horse", word2 = "ros"
    Output: 3
    Explanation: 
    horse -> rorse (replace 'h' with 'r')
    rorse -> rose (remove 'r')
    rose -> ros (remove 'e')
    

    Example 2:

    Input: word1 = "intention", word2 = "execution"
    Output: 5
    Explanation: 
    intention -> inention (remove 't')
    inention -> enention (replace 'i' with 'e')
    enention -> exention (replace 'n' with 'x')
    exention -> exection (replace 'n' with 'c')
    exection -> execution (insert 'u')

    时间复杂度为O(mn)
    public int minDistance(String word1, String word2) {//dp mytip
            int[][] dp = new int[word1.length()+1][word2.length()+1];//word1前i个字符和word2前j个字符最少的改变次数
            for(int i=1;i<=word1.length();i++){//相当于word1和word2前同时加一个相同的字符,并初始化
                dp[i][0] = i;
            }
            for(int i=1;i<=word2.length();i++){
                dp[0][i]=i;
            }
            for(int i=0;i<word1.length();i++){
                for(int j=0;j<word2.length();j++){
                    if(word1.charAt(i)==word2.charAt(j)){//如果i和j相同不需要操作
                        dp[i+1][j+1]=dp[i][j];
                    }
                    else{//如果不同,判断增删改,哪个操作更少
                        int min = dp[i][j+1]>dp[i+1][j]?dp[i+1][j]:dp[i][j+1];
                        min = min>dp[i][j]?dp[i][j]:min;
                        dp[i+1][j+1]=min+1;
                    }
                }
            }
            return dp[word1.length()][word2.length()];
        }

    空间上可优化 只保存当前行和上一行

    还可以适用BFS

  • 相关阅读:
    UVA 401 回文词
    n的阶乘分解成素数幂的积
    DSSM问答匹配模型
    Enhanced LSTM for Natural Language Inference
    Bidirectional LSTM-CRF Models for Sequence Tagging
    Attention Is All You Need 学习笔记
    BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding
    C++学习笔记(四)
    C++学习笔记(三)
    java学习笔记(七)
  • 原文地址:https://www.cnblogs.com/zhacai/p/10661858.html
Copyright © 2011-2022 走看看