Trie樹

建立一個字典樹,先存入單詞,再查找單詞,最后輸出具有該前綴的單詞數量。

#include<cstdio>
#include<cstdlib>

struct node
{
    int cnt;
    int next[26];
} T[10000010];

int t=0;
char str[20];

void Insert(char *s)
{
    int i=0, p=0, temp;
    while(s[i])
    {
        temp=s[i]-'a';
        if(T[p].next[temp]==0)
        {
            t++;
            T[p].next[temp]=t;
        }
        p=T[p].next[temp];
        T[p].cnt++;
        i++;
    }
}

void Query(char *s)
{
    int i=0, p=0, temp;
    while(s[i])
    {
        temp=s[i]-'a';
        if(T[p].next[temp]==0)
        {
            printf("0\n");
            return ;
        }
        p=T[p].next[temp];
        i++;
    }
    printf("%d\n",T[p].cnt);
    return ;
}

int main()
{
    int m, n;
    scanf("%d", &n);
    getchar();
    while(n--)
    {
        gets(str);
        Insert(str);
    }
    scanf("%d", &m);
    getchar();
    while(m--)
    {
        gets(str);
        Query(str);
    }
    return 0;
}

核心代碼:

void Insert(char *s)
{
    int i=0, p=0, temp;
    while(s[i])
    {
        temp=s[i]-'a';
        if(T[p].next[temp]==0)
        {
            t++;
            T[p].next[temp]=t;
        }
        p=T[p].next[temp];
        T[p].cnt++;
        i++;
    }
}

先判斷是否存在該前綴,如果不存在,就構建新的枝葉。
查找一個就為該枝葉記一次數,表示到該枝葉的前綴個數

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 字典樹(Trie)筆記 特別聲明 本文只是一篇筆記類的文章,所以不存在什么抄襲之類的。 以下為我研究時參考過的鏈接...
    Harlan1994閱讀 20,278評論 2 21
  • 題目: 時間限制:10000ms單點時限:1000ms內存限制:256MB描述小Hi和小Ho是一對好朋友,出生在信...
    科學旅行者閱讀 187評論 0 0
  • Trie樹,即字典樹,又稱單詞查找樹。經常應用于字符串的統計與排序,經常被搜索引擎系統用于文本詞頻統計。 核心思想...
    wayyyy閱讀 502評論 0 0
  • 一個下著大雨的夜晚,我變得異常煩躁,什么也做不好。彈古箏時我只要彈錯一個音就會憤怒地用手砸琴,“咣咣”,我媽媽和大...
    小學生朱提提閱讀 412評論 0 3
  • 受小石被領導重視的影響,想起自己被領導說先去當間諜然后就是自己人,因我考慮到好同事友的關系沒去,當然也被領導邊緣化...
    北極熊和小兔子閱讀 547評論 0 49