1

ビデオを使用して接頭辞トライを理解しました(最終的には接尾辞トライに到達しようとしていますが)が、サンプルコードへのリンクが壊れているため、ビデオからこれを思いつきました.2つの機能、つまり挿入があります以下のように検索します

  void insert(string word)
{
    node* current=head;
    current->prefix_count++;
    for(unsigned int i=0;i<word.length();++i)
    {
        int letter=(int)word[i]-(int)'a';
        if (current->child[letter]==NULL)
            current->child[letter]=new node();
        current->child[letter]->prefix_count++;
        current=current->child[letter];
            }
    current->is_end=true;
}

bool search(string word)
{
    node *current=head;
    for(int i=0;i<word.length();++i)
    {
        if(current->child[((int)word[i]-(int)'a')]==NULL)
            return false;
        current=current->child[((int)word[i]-(int)'a')];
    }
    return current->is_end;
}

次に、メインを次のように実装しました。

int main(){
node* head=NULL;

 string s="abbaa";
 init();
 insert(s);
 if(search("ab")==true) cout<<"Found"<<endl;
 else cout<<"Not found"<<endl;

}

そして、私は次の出力を得ています: 見つかりません

文字列 s に ab があるため、これは混乱を招きます。

そして最後に、私はこの行を理解しようとしています:

int letter=(int)word[i]-(int)'a';

これは、'a' の ASCII コードを取得し、現在の文字の ASCII コードから差し引くということですか?

ありがとうございました

4

1 に答える 1