問題: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(接頭辞、接尾辞)。 * /