データ構造とアルゴリズム - 文字列マッチング

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())?パターン+:文字列の正確に一致 +のパターン); 
    } 
}

 

おすすめ

転載: www.cnblogs.com/jiangwangxiang/p/11106262.html
おすすめ