2.編集距離O(N * M)

、WORD1が使用WORD2変換操作の最小数を計算するためにWORD1とWORD2二つの単語を考えます。

あなたは一つの単語の上に、以下の3つの操作を実行できます。

文字を挿入し
、文字削除
文字置き換えるために、
例1:

入力:単語1 = "馬"、WORD2 = "ROS"
出力:3
説明:
馬- > rorse '( 'R&LT'' Hに置き換えられます)
rorse - >ローズ(削除'R&LT')
ローズ- > ROS(削除」 E「)
例2:

入力:単語1 = "意思"、WORD2 = "実行"
出力:5
説明:
意図で- > inention(削除'T')
inention - > enention( 'E'に'I'を置き換える)
enention - > Exention( ' N X 'で置換されている' ')
Exention - >・実行(N' C 'で置換されている' ')
・実行- >実行される(挿入' U「)

DP DP [I] [J] =分{DP [I-1] [J-1] +1、DP [I-1]〜[J] + 1、DP [I]、[J-1] +1} 

                                                 DELETE、INSERT、DELETE、INSERTを交換してください

 

int型DP [1005] [1005]; 
クラス解決{ 
パブリック:
    INT minDistance(文字列WORD1、ストリングWORD2){ 
        memsetの(DP、/ 3 127はsizeof(DP))。
        以下のために(INT iが= 0; I <= word1.size(); I ++)DP [I] [0] = I。
        以下のために(INT I 0 =; I <= word2.size(); I ++)DP [0] [I] = I。
        INT SIZ1 = word1.size()、siz2 = word2.size()。
        {(++ I; I <SIZ1 INTがI = 0)するための
            ための(int型J = 0; J <siz2; ++ J){ 
                IF(WORD1 [I] == WORD2 [J])DP [I + 1 ] [J + 1] = DP [I] [J]。
                他{ 
                    DP [I + 1] [J + 1] =分(DP [I] [J] + 1、分(DP [I]、[J + 1] + 1、DP [I + 1] [J] + 1))。
                } 
            } 
        } 
        戻りDP [SIZ1] [siz2]。
    }
}。

  

 

おすすめ

転載: www.cnblogs.com/DreamKill/p/12590533.html