字典數 入門理解

來源:互聯網
上載者:User

又扒了一段代碼 很簡單 注釋自己看 

#include <iostream>#include <cstring>#include <cstdio>using namespace std;const int MAX = 26; //26個字母 若構成字典樹是位元 MAX=2;struct Trie  //內部所需可自己定義{     Trie *next[MAX];     bool isword;     Trie () {  for(int j=0;j<MAX;j++)next[j] = NULL;                isword = false;}};Trie *root = new Trie;char word[50000][30];void createTrie(char str[]){    int len = strlen(str);    Trie *p = root,*q = NULL;    for(int i=0;i<len;i++)    {         int id = str[i]-'a';  //asii碼檢索         if(p->next[id]==NULL)         {              q = new Trie;               q->isword = false;              p->next[id] = q; //後插         }          if(i==len-1)          p->next[id]->isword = true; //最後一個插入,一個單詞產生!          p = p->next[id]; //next[id]是個Trie 指標 指向下一個    }}bool findTrie(char str[]){     int len = strlen(str);     Trie *p = root;   for(int i=0;i<len;i++)   {        int id = str[i]-'a';        if(p->next[id]==NULL)        {              return false;        }         p = p->next[id];   }   if(p->isword) //找到len若尋找的單詞不作為一個單詞(只是有單詞包括在內)在字典樹裡   return true;   else     return false;}void del(Trie *root) //釋放字典樹 可寫在結構體內{   for(int i=0;i<MAX;i++)   {        if(root->next[i]!=NULL)        {             del(root->next[i]);        }   }   delete root;}int main(){    int num=0;    char str1[30],str2[30];    while(gets(word[num]))    {         createTrie(word[num]);         num++;    }  //建樹    for(int i=0;i<num;i++)    {         int len = strlen(word[i]);         if(len==1)          continue;        for(int j=0;j<len;j++)//從每個單詞的各部分拆開     {          int k;          if(j==len-1) continue;         for(k=0;k<=j;k++)          {               str1[k] = word[i][k];          }          str1[k]='\0';  //串尾結束標誌          int k2=0;          for(int l=k;l<len;l++)          {               str2[k2++]=word[i][l];          }          str2[k2]='\0';          if(findTrie(str1)&&findTrie(str2))          {               cout<<word[i]<<endl;               break;//          }     }    }     del(root);    return 0;}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.