File tree Expand file tree Collapse file tree 1 file changed +60
-0
lines changed Expand file tree Collapse file tree 1 file changed +60
-0
lines changed Original file line number Diff line number Diff line change 1+ struct  TrieNode  {
2+ 	TrieNode* children[26 ];
3+ 	bool  isWordEnd;
4+ 
5+ 	TrieNode () : isWordEnd(false ) {
6+ 		for  (int  i = 0 ; i < 26 ; ++i)
7+ 			children[i] = nullptr ;
8+ 	}
9+ };
10+ 
11+ class  Trie  {
12+ private: 
13+ 	TrieNode* root;
14+ public: 
15+ 	Trie () {
16+ 		root = new  TrieNode;
17+ 	}
18+ 
19+ 	void  insert (string word) {
20+ 		TrieNode* cur = root;
21+ 
22+ 		int  idx;
23+ 		for  (int  i = 0 ; i < word.size (); ++i) {
24+ 			idx = word[i] - ' a'  ;
25+ 			if  (cur->children [idx] == nullptr )
26+ 				cur->children [idx] = new  TrieNode;
27+ 			cur = cur->children [idx];
28+ 		}
29+ 		//  mark the last node as end of a word
30+ 		cur->isWordEnd  = true ;
31+ 	}
32+ 
33+ 	bool  search (string word) {
34+ 		TrieNode* cur = root;
35+ 
36+ 		int  idx;
37+ 		for  (int  i = 0 ; i < word.size (); ++i) {
38+ 			idx = word[i] - ' a'  ;
39+ 			if  (cur->children [idx] == nullptr )
40+ 				return  false ;
41+ 			cur = cur->children [idx];
42+ 		}
43+ 		//  check if the node is end of any word
44+ 		return  cur->isWordEnd ;
45+ 	}
46+ 
47+ 	bool  startsWith (string prefix) {
48+ 		TrieNode* cur = root;
49+ 
50+ 		int  idx;
51+ 		for  (int  i = 0 ; i < prefix.size (); ++i) {
52+ 			idx = prefix[i] - ' a'  ;
53+ 			if  (cur->children [idx] == nullptr )
54+ 				return  false ;
55+ 			cur = cur->children [idx];
56+ 		}
57+ 		//  only need to check if the node exists
58+ 		return  true ;
59+ 	}
60+ };
    
 
   
 
     
   
   
          
     
  
    
     
 
    
      
     
 
     
    You can’t perform that action at this time.
  
 
    
  
     
    
      
        
     
 
       
      
     
   
 
    
    
  
 
  
 
     
    
0 commit comments