国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專(zhuān)欄INFORMATION COLUMN

leetcode72. Edit Distance

venmos / 1734人閱讀

摘要:題目要求輸入兩個(gè)字符串和,允許對(duì)進(jìn)行插入,刪除和替換的操作,計(jì)算出將轉(zhuǎn)化為所需要的最少的操作數(shù)。其中存儲(chǔ)的是轉(zhuǎn)換為的最小步數(shù)。首先從邊緣情況開(kāi)始考慮。只要在此基礎(chǔ)上再進(jìn)行一次插入操作即可以完成轉(zhuǎn)換。

題目要求
Given two words word1 and word2, find the minimum number of steps required to convert word1 to word2. (each operation is counted as 1 step.)

You have the following 3 operations permitted on a word:

a) Insert a character
b) Delete a character
c) Replace a character

輸入兩個(gè)字符串word1和word2,允許對(duì)word1進(jìn)行插入,刪除和替換的操作,計(jì)算出將word1轉(zhuǎn)化為word2所需要的最少的操作數(shù)。

思路

這是一道典型的dynamic programming的題目,這里我們利用二維數(shù)組steps來(lái)存儲(chǔ)相應(yīng)的情況。其中steps[i][j]存儲(chǔ)的是word1[0..i-1]轉(zhuǎn)換為word2[0..j-1]的最小步數(shù)。那么如何計(jì)算stepsi呢。
首先從邊緣情況開(kāi)始考慮。

如果i=0,也就是word1=“”,那么將word1轉(zhuǎn)化為word2的最少操作數(shù)為j
同理,如果j=0,也就是word2=“”,那么將word2轉(zhuǎn)化為word1的最少操作數(shù)為i

這時(shí)我們?cè)倏紤]i,j都不為0的情況。
可能出現(xiàn)以下幾種情況:
1.word1[i-1]==word2[j-1]
如果下標(biāo)相等,那么steps[i][j]=steps[i-1][j-1]。從語(yǔ)義的角度上來(lái)說(shuō),假設(shè)已知將word1[0...i-2]轉(zhuǎn)化為word2[0...j-2]的最小操作數(shù),那么如果彼此下一個(gè)值相等,則無(wú)需進(jìn)行操作。
2.word1[i-1]!=word2[j-1]

插入:在word1[i-1]的位置上插入word2[j-1],也就是說(shuō)word1[0...i-1]=word2[0...j-1],steps[i][j]=steps[i][j-1]+1
替換:將word1[i-1]的值替換為word2[j-1]。steps[i][j]=steps[i-1][j-1]+1
刪除:將word1[i-1]的值刪除使word1[0...i-2]等價(jià)于word2[j-1], steps[i][j] = steps[i-1][j]+1
在這里解釋一下插入和刪除的算法的原理。
如果插入即可使word1[0...i-1]轉(zhuǎn)化為word2[0...j-1],那么意味著word[0...i-1]可以轉(zhuǎn)換為word2[0...j-2]。只要在此基礎(chǔ)上再進(jìn)行一次插入操作即可以完成轉(zhuǎn)換。所以steps[i][j]=steps[i][j-1]+1
刪除操作同理,word[0...i-2]可以轉(zhuǎn)化為word[0...j-1],只需要再此基礎(chǔ)上再進(jìn)行一次刪除操作即可,所以steps[i][j] = steps[i-1][j]+1
代碼
    public int minDistance(String word1, String word2) {
        if(word1.isEmpty()) return word2.length();
        if(word2.isEmpty()) return word1.length();
        int[][] steps = new int[word1.length()+1][word2.length()+1];
        for(int i = 0 ; i<=word1.length() ; i++){
            for(int j = 0 ; j<=word2.length() ; j++){
                if(i==0){
                    steps[i][j] = j;
                }else if(j==0){
                    steps[i][j] = i;
                }else if(word1.charAt(i-1) == word2.charAt(j-1)){
                    steps[i][j] = steps[i-1][j-1];
                 }else{
                     steps[i][j] = Math.min(Math.min(steps[i][j-1]+1, steps[i-1][j-1]+1), steps[i-1][j]+1);
                 }
                    
            }
        }
        return steps[word1.length()][word2.length()];
    }

優(yōu)化后的代碼如下:

    public int minDistance2(String word1, String word2){
        if(word1.isEmpty()) return word2.length();
        if(word2.isEmpty()) return word1.length();
        int[] steps = new int[word2.length()+1];
        for(int j = 0 ; j<=word2.length() ; j++){
            steps[j] = j;
        }
        for(int i = 1 ; i<=word1.length() ; i++){
            int pre = steps[0];
            steps[0] = i;
            for(int j = 1 ; j<=word2.length() ; j++){
                int temp = steps[j];
                if(word1.charAt(i-1)==word2.charAt(j-1)){
                    steps[j] = pre;
                }else{
                    steps[j] = Math.min(pre+1, Math.min(steps[j]+1, steps[j-1]+1));
                }
                pre = temp;
            }

        }
        return steps[word2.length()];
    }


想要了解更多開(kāi)發(fā)技術(shù),面試教程以及互聯(lián)網(wǎng)公司內(nèi)推,歡迎關(guān)注我的微信公眾號(hào)!將會(huì)不定期的發(fā)放福利哦~

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/67550.html

相關(guān)文章

  • LeetCode[72] Edit Distance

    摘要:復(fù)雜度思路考慮用二維來(lái)表示變換的情況。如果兩個(gè)字符串中的字符相等,那么如果兩個(gè)字符串中的字符不相等,那么考慮不同的情況表示的是,從字符串到的位置轉(zhuǎn)換到字符串到的位置,所需要的最少步數(shù)。 LeetCode[72] Edit Distance Given two words word1 and word2, find the minimum number of steps require...

    call_me_R 評(píng)論0 收藏0
  • 72 Edit Distance 以及兩個(gè)string比較的填表通解。

    摘要:給出兩個(gè)解,一個(gè)是填表,一個(gè)是記憶化搜索。因?yàn)樘畋硪欢〞?huì)把的表填滿(mǎn)。走出來(lái)的則是一條從起點(diǎn)到終點(diǎn)的線(xiàn),不會(huì)填滿(mǎn)整個(gè)表。時(shí)間退化到,變成找路徑的時(shí)間。 72 Edit Distance Given two words word1 and word2, find the minimum number of steps required to convert word1 to word2. ...

    ormsf 評(píng)論0 收藏0
  • [Leetcode] One Edit Distance 編輯距離為一

    摘要:比較長(zhǎng)度法復(fù)雜度時(shí)間空間思路雖然我們可以用的解法,看是否為,但中會(huì)超時(shí)。這里我們可以利用只有一個(gè)不同的特點(diǎn)在時(shí)間內(nèi)完成。 One Edit Distance Given two strings S and T, determine if they are both one edit distance apart. 比較長(zhǎng)度法 復(fù)雜度 時(shí)間 O(N) 空間 O(1) 思路 雖然我們可以用...

    lewinlee 評(píng)論0 收藏0
  • Leetcode[161] One Edit Distance

    摘要:復(fù)雜度思路考慮如果兩個(gè)字符串的長(zhǎng)度,是肯定當(dāng)兩個(gè)字符串中有不同的字符出現(xiàn)的時(shí)候,說(shuō)明之后的字符串一定要相等。的長(zhǎng)度比較大的時(shí)候,說(shuō)明的時(shí)候,才能保證距離為。 LeetCode[161] One Edit Distance Given two strings S and T, determine if they are both one edit distance apart. Stri...

    周?chē)?guó)輝 評(píng)論0 收藏0
  • [Leetcode] Edit Distance 最小編輯距離

    摘要:動(dòng)態(tài)規(guī)劃復(fù)雜度時(shí)間空間思路這是算法導(dǎo)論中經(jīng)典的一道動(dòng)態(tài)規(guī)劃的題。 Edit Distance Given two words word1 and word2, find the minimum number of steps required to convert word1 to word2. (each operation is counted as 1 step.) You h...

    zhangke3016 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<