編輯距離

描述

給定兩個(gè)字符串 str1 和 str2 ,請(qǐng)你算出將 str1 轉(zhuǎn)為 str2 的最少操作數(shù)。
你可以對(duì)字符串進(jìn)行3種操作:
1.插入一個(gè)字符
2.刪除一個(gè)字符
3.修改一個(gè)字符。

image.png

思路:
1、初始條件: 假設(shè)第二個(gè)字符串為空,那很明顯第一個(gè)字符串子串每增加一個(gè)字符,編輯距離就加1,這步操作是刪除;同理,假設(shè)第一個(gè)字符串為空,那第二個(gè)字符串每增加一個(gè)字符,編劇距離就加1,這步操作是添加。 dp[i][0] 和 dp[0][j] 初始化從1開(kāi)始

2、如果str1 i位置對(duì)應(yīng) str2 j位置相等字符,那么操作次數(shù)與兩個(gè)子串的前一個(gè)相同dp[i][j] = dp[i-1][j-1];
如果不相等, dp[i][j] = Math.min(dp[i-1][j-1],Math.min(dp[i-1][j],dp[i][j-1]))+1;

 public int editDistance (String str1, String str2) {
        // write code here
        int length1 = str1.length();
        int length2 = str2.length();
        int[][] dp = new int[length1+1][length2+1];
        for(int i = 1;i<=length1;i++){
            dp[i][0] = dp[i-1][0]+1;
        }
        for(int i = 1;i<=length2;i++){
            dp[0][i] = dp[0][i-1]+1;
        }
        for(int i = 1;i<=length1;i++){
             for(int j = 1;j<=length2;j++){
                 if(str1.charAt(i-1) == str2.charAt(j-1)){
                     dp[i][j] = dp[i-1][j-1];
                 }else{
    dp[i][j] = Math.min(dp[i-1][j-1],Math.min(dp[i-1][j],dp[i][j-1]))+1;
                 }
                     
             }
        }
        return dp[length1][length2];
    }
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容