每日算法:

用动态规划解题:
dp[i][j]表示word1 0 - i 与word2 0 - j 的edit distance。
当增加的如果word 1[i] == word2[j]则 dp[i+1][j+1] = dp[i][j];
如果不一样则可以通过三种方式一样 insert replace delete
delete: 则是dp [i+1][j+1] = dp[i][j+1] + 1 (word2的index增加了一个i却没有增加)
replace : 则是dp [i+1][j+1] = dp[i][j] + 1
insert : 则是dp [i+1][j+1] = dp[i+1][j] + 1

 public int minDistance(String word1, String word2) {
        int m = word1.length();
        int n = word2.length();
        int[][] dp = new int[m+1][n+1];
        for(int i = 0;i<m+1;i++)dp[i][0] = i;
        for(int i = 0;i<n+1;i++)dp[0][i] = i;
        
        for(int i = 1;i<m+1;i++) {
            for (int j = 1;j<n+1;j++){
                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][j-1],Math.min(dp[i-1][j],dp[i-1][j-1]));
                }
            }
        }
        return dp[m][n];
    }
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容