Advertisement
anoosykh95

Untitled

Jul 22nd, 2016
387
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.43 KB | None | 0 0
  1. #include<bits/stdc++.h>
  2. #define P(x,y) make_pair(x,y)
  3. using namespace std;
  4. struct node;
  5. typedef node* pnode;
  6. struct node{
  7.     int cnt;
  8.     bool isend;
  9.     vector < pair < char , pnode > > child;
  10.     node(){ cnt=isend=0; child.clear(); }
  11. };
  12. class Trie{
  13.     public:
  14.     pnode head;
  15.     void Clear(pnode &it){
  16.         if(!it) return;
  17.         delete(it);
  18.         for(auto nxt : it->child)
  19.             Clear(nxt.second);
  20.     }
  21.     void init(){
  22.         Clear(head);
  23.         head = new node();
  24.     }
  25.  
  26.     void insert_(string str){
  27.         pnode it = head;
  28.         it->cnt++;
  29.         for(auto let : str){
  30.             bool ok=0;
  31.             for(auto nxt : it->child){
  32.                 if(nxt.first == let){
  33.                     it = nxt.second;
  34.                     ok = 1;
  35.                     break;
  36.                 }
  37.             }
  38.             if(!ok){
  39.                 it->child.push_back(P(let , new node()));
  40.                 it = it->child.back().second;
  41.             }
  42.             it->cnt++;
  43.         }
  44.         it->isend=1;
  45.     }
  46.     bool find_(string str){
  47.         pnode it = head;
  48.         for(auto let : str){
  49.             bool ok=0;
  50.             for(auto nxt : it->child){
  51.                 if(nxt.first == let){
  52.                     it = nxt.second;
  53.                     ok = 1;
  54.                     break;
  55.                 }
  56.             }
  57.             if(!ok) return 0;
  58.         }
  59.         return it->isend;
  60.     }
  61. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement