ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

leetcode676 实现一个魔法字典

2022-07-11 17:31:36  阅读:123  来源: 互联网

标签:search return int true 魔法 leetcode676 root id 字典


思路:

字典树。

实现:

 1 class TrieNode{
 2 public:
 3     vector<TrieNode*>v;
 4     bool isLeaf=false;
 5     TrieNode(){
 6         v.resize(26,NULL);
 7     }
 8 };
 9 class Trie{
10 public:
11     TrieNode*root;
12     Trie(){
13         root=new TrieNode();
14     }
15     void insert(string&s){
16         int n=s.length();
17         auto cur=root;
18         for(int i=0;i<n;i++){
19             int id=s[i]-'a';
20             if(cur->v[id]==NULL){
21                 cur->v[id]=new TrieNode();
22             }
23             cur=cur->v[id];
24         }
25         cur->isLeaf=true;
26     }
27     bool search(string&s){
28         return _search(s,0,root,false);
29 
30     }
31     bool _search(string&s,int p,TrieNode*root,bool isReplaced){
32         int n=s.length();
33         if(p==n-1){
34             int id=s[p]-'a';
35             for(int i=0;i<26;i++){
36                 if(root->v[i]==NULL){
37                     continue;
38                 }
39                 else if(i==id){
40                     if(isReplaced and root->v[i]->isLeaf){
41                         return true;
42                     }
43                 }
44                 else{
45                     if(!isReplaced and root->v[i]->isLeaf){
46                         return true;
47                     }
48                 }
49             }
50             return false;
51         }
52         int id=s[p]-'a';
53         for(int i=0;i<26;i++){
54             if(root->v[i]==NULL){
55                 continue;
56             }
57             else if(i==id){
58                 if(_search(s,p+1,root->v[i],isReplaced)){
59                     return true;
60                 }
61             }
62             else{
63 
64                 if(!isReplaced and _search(s,p+1,root->v[i],true)){
65                     return true;
66                 }
67             }
68         }
69         return false;
70     }
71 
72 };
73 class MagicDictionary {
74 public:
75     Trie*root=new Trie();
76     MagicDictionary() {
77 
78     }
79     
80     void buildDict(vector<string> dictionary) {
81         int n=dictionary.size();
82         for(int i=0;i<n;i++){
83             root->insert(dictionary[i]);
84         }
85 
86     }
87     
88     bool search(string searchWord) {
89         return root->search(searchWord);
90 
91     }
92 };

标签:search,return,int,true,魔法,leetcode676,root,id,字典
来源: https://www.cnblogs.com/wangyiming/p/16467187.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有