第3章:LeetCode--アルゴリズム:STRSTR KMPアルゴリズム

https://leetcode.com/problems/implement-strstr/   28)(STRSTRを実装

暴力アルゴリズム:

INT ViolentMatch(チャー *のS、チャー *のP)   
{   
    int型 SLEN = STRLEN(S);  
     INT PLEN = STRLEN(P)は、   
  
    int型 I = 0 ;  
     INT J = 0 ;  
     ながら(私は<SLEN && J < PLEN)   
    {   
        IF(S [I] == P [J])   
        {   
            // ①成功した文字が一致する場合、現在の(即ち、S [I] == P [J ])、 次いで、i、jは++ ++       
            I ++は
            J ++ ;   
        }   
          
        {   
            //②ミスマッチ(すなわち、S [i]は= P [J!もし ])、 I = Iとなるよう- (J - 1。)、J 0 =       
            I = I - Jの+ 1。;   
            J = 0 ;   
        }   
    }   
    // 成功した試合、そうでなければ-1パターン文字列のテキスト文字列内のP戻り位置、   
    IF(J == PLEN)  
         リターン I - J、  
     他の  
        リターン - 1 ;   
}  

 

KMP(クヌース - モリス - プラット)アルゴリズム:

ときはT [i]が!= P [j]のとき

そこT [IJ〜I-1] == P [0〜J-1]

Pは[0〜K-1] == P [JK〜J-1]

必然:T [IK〜I-1] == P [0〜K-1] - > K <Jため

 指定されたパターン文字列がある場合:全体のパターン文字列を介して左から右へ「ABCDABD」、次のように、プレフィックスとサフィックステーブルを各部分は、次のとおり
    すなわち、最大長テーブル、要素の共通接頭辞と接尾辞の各々に対応する元のサブパターン文字列(以下は「最大長」と呼ぶ)です。
 
KMPアルゴリズム:より容易に0から明らか= NEXT配列の添字=
クラスソリューション{ 
パブリック:
     
    ボイドGenNext(列P、次INT []){ 
        int型PLEN = p.size()。
        次の[0] = 0; 
        int型J = 0; 
        以下のために(INT I = 1; I <PLEN;){ 
            IF(P [j] == P [I]){ 
                次の[I] = J + 1。
                J ++; 
                I ++; 
            } 
            他{ 
                IF(J = 0!)
                    J =次の[J-1]。
                他{ 
                    次の[I] = 0; 
                    I ++; 
                } 
            } 
        } 
    } 
    int型STRSTR(文字列干し草、文字列針){
        INT SLEN = haystack.size()。
        INT PLEN = needle.size()。
        もし(SLEN <PLEN)リターン-1; 
        もし(針== "" ||干し草の山== "")の戻り0; 
        int型I = 0、J = 0; 
        int型の次の[PLEN]。
        GenNext(針、次); 
        一方、(I <SLEN && J <PLEN){ 
            IF(干し草の山[I] ==ニードル[J]){ 
                I ++。
                J ++; 
            }他{ 
                IF(J = 0!)
                    J =次の[J-1]。
                他に
                    私が++します; 
            } 
        } 
        もし(J == PLEN)戻りIJ。
        -1を返します。
    } 
}。

 KMPアルゴリズムリファレンス:https://www.cnblogs.com/ZuoAndFutureGirl/p/9028287.html

 

より高度な検索アルゴリズム:

BMアルゴリズム日曜日のアルゴリズムhttps://www.cnblogs.com/ZuoAndFutureGirl/p/9028287.html

おすすめ

転載: www.cnblogs.com/feliz/p/11010401.html