• lc583


    有两种解法,一种是求两个单词的最长公共子列,最后结果为m*n-dp[m][n]

    其中dp[m][n]表示两个单词的最长公共子列长度

    另一种解法是直接算:

    class Solution {
        public int minDistance(String word1, String word2) {
            int m=word1.length(),n=word2.length();
            int[][] dp=new int[m+1][n+1];
            for(int i=0;i<=m;i++){
                for(int j=0;j<=n;j++){
                    if(i==0||j==0) dp[i][j]=i+j;
                    else if(word1.charAt(i-1)==word2.charAt(j-1)){
                        dp[i][j]=dp[i-1][j-1];
                    }else{
                        dp[i][j]=1+Math.min(dp[i-1][j],dp[i][j-1]);
                    }
    
                }
            }
            return dp[m][n];
           
        }
    }

    如果第i和第j位相同,那么dp[i][j]=dp[i-1][j-1],即两个单词最后一位不用删

    如果不相同,说明这两位在最终结果中肯定有一位是要被删掉的,只需考虑s1[1:i-1]和s2[1:j]以及s1[1:i]和s2[1:j-1]之间至少要删掉多少个字符,然后把结果加上1就行。、

  • 相关阅读:
    Close doc
    Add to word and save
    xml dataGrideView
    listView save and get
    extract word into string
    DataGrideView DataTable XML
    bookmark
    VB对象的链接与嵌入
    文件系统处理(一)
    既然选择了远方,便只顾风雨兼程
  • 原文地址:https://www.cnblogs.com/ljf-0/p/13891742.html
Copyright © 2020-2023  润新知