[トライ树] leetcode 745接頭辞と接尾辞を検索します

問題:https://leetcode.com/problems/prefix-and-suffix-search/

        (両方の検索結果に存在する)プレフィックスとサフィックスを満たしながら、トライ、2本のそれぞれの木、すべての条件を満たすように、文字列の接頭辞と接尾辞の文字列を見つける迅速、接頭辞と接尾辞木のツリーを維持するために、とは、一つ一つを比較すると、標準の最大値を削除します。

クラスWordFilter {
     構造体トライ
    { 
        チャーCH。
        BOOL bWord = ; 
        unordered_map < CHAR、トライ*> チャイルズ。     
        トライ(チャーC):CH(C){} 
        トライ(){} 
    }。
公共
    トライが *開始= nullptr; 
    トライ *エンド= nullptr; 
    unordered_map < 文字列int型 > インデックス。
    挿入(トライ*&CUR、char型の CH、BOOLbWord)
    { 
        場合(cur-> childs.find(CH)== cur-> childs.end())
        { 
            CUR - >チャイルズ[CH] = 新しいトライ(CH)を、
        } 
        CUR = cur-> チャイルズ[CH]。
        もし(bWord)cur-> bWord = 
    } 
        
    ボイド取得(トライ*のCUR、ベクトル< ストリング >&RES、文字列strの)
    { 
        場合(cur-> bWord)
        { 
            res.push_back(STR)。
        } 
        のための(自動&子:cur-> チャイルズ)
        { 
            (child.second、RES、STRゲット+ child.first)。
        } 
    } 
    ボイド検索(トライ* CUR、ベクトル< ストリング >&RES、CONST  ストリングワード)
    { 
        ためint型 i = 0 ; iが<)(word.sizeと、iは++ 
        { 
            場合(cur-> childs.findを(ワード[I])== cur-> childs.end())
            { 
                返します
            } 
            
            { 
                CUR = cur-> チャイルズ[単語[I]]。
            } 
        } 
        を返す(CUR、RES、単語)を取得します。
    }
    
    WordFilter(ベクトル < ストリング >・ワード){ 
        始める = 新しいトライ()。
        終了 = 新しいトライ();
        int型のカウント= 0 ;
        (オート・ワード:ワード)
        { 
            指数[単語] =カウント++ 
            トライ * CUR = 始めます。
            以下のためにint型 I = 0 ; iが(word.sizeを<); iが++ 
            { 
                挿入(CUR、ワード[i]は、I == word.size() -1 )。
            } 
            CUR = END;
            以下のためにint型 I = word.size() - 1 ; I> = 0 ; i-- 
            { 
                挿入(CUR、ワード[i]は、I == 0 )。
            }             
        } 
    } 

    int型 F(文字列プレフィックス、文字列のサフィックス){ 
        ベクトル < ストリング > preStr。
        ベクトル < 文字列 > sufStr。
        逆(suffix.begin()、suffix.end())。
        検索(開始、preStr、接頭辞)。
        検索(終わり、sufStr、接尾辞)。
        (オート&SUF:sufStr)
        { 
            逆(suf.begin()、suf.end())。
        } 
        INT RES = - 1 (オート&:preStr PRE)
        { 
          
            ための(自動&SUF:sufStr)
            { 
                場合(事前== SUF)
                { 
                    RES = MAX(RES、インデックス[事前])。
                } 
            } 
        } 
        戻りRES。
    } 
}。

/ **
 *あなたのWordFilterオブジェクトは、次のようなインスタンス化と呼ばれます:
 * WordFilter * OBJ =新しいWordFilter(ワード)。
 * int型PARAM_1 = obj-> F(接頭辞、接尾辞)。
 * /

 

おすすめ

転載: www.cnblogs.com/fish1996/p/11298505.html