1、トライ木
パブリック クラスTrieTree { プライベート TrieNodeルートは= 新しい新しい TrieNode(' / '); // ストア無意味な文字 // トライ内の文字列を挿入する 公共 ボイド INSERTを(文字[]のテキスト){ TrieNode Pは = ルートを、 のために(int型 = I 0、Iはtext.length <; I ++は){ int型のインデックス=テキスト[I] - [ A ' ; IF(p.children [インデックス] == NULL ){ TrieNode newNode= 新新TrieNode(テキスト[I]); p.childrenは、[インデックス] = newNode; } P = p.children [インデックス]; } p.isEndingChar = trueにし; } // トライ内の文字列を見つける 公共ブールする検索(CHAR []パターン){ TrieNode Pは = ルートと、 のための(int型 I = 0 ;私は<pattern.length; Iは++ ){ int型のインデックス=パターン[I] - [ A ' ; IF(p.children [インデックス] == NULL ){ 戻り falseに ; // パターンが存在しない } P = p.children [インデックス]; } IF(p.isEndingChar){ // パターンに正確に一致する リターン trueに; } 他 { //は完全に一致するが、プレフィックスない リターン falseに; } } パブリック クラスTrieNode { パブリック チャー、データ 公共 TrieNode [] =子供新しい新規 [TrieNode26 ]。 パブリックブールisEndingChar = 偽; 公共 TrieNode(チャーデータ){ この .DATA = データ。 } } パブリック 静的 ボイドメイン(文字列[]引数){ TrieTree trieTree = 新しいTrieTree()。 trieTree.insert(" こんにちは" .toCharArray()); trieTree.insert(" 世界" .toCharArray()); trieTree.insert(" 言葉" .toCharArray()); trieTree.insert(" 教師" .toCharArray()); trieTree.insert(" 野生" .toCharArray()); 文字列のパターン = 「言葉」。 システム。アウト .println(trieTree.find(pattern.toCharArray())?" 找到了" +パターン:" 没有完全匹配的字符串" + パターン)。 パターン = 「WOR 」。 システム。アウト .println(trieTree.find(pattern.toCharArray())?」パターン+:「文字列の正確に一致」 +のパターン); } }