力扣676.实现一个邪术字典

打印 上一主题 下一主题

主题 1786|帖子 1786|积分 5360

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
力扣676.实现一个邪术字典



  • 字典树 + dfs
    1.   class Trie
    2.   {
    3.       public:
    4.       Trie* next[26];
    5.       bool is_end = false;
    6.   };
    7.   class MagicDictionary {
    8.   public:
    9.       Trie* root = new Trie();
    10.       
    11.       void add(string& word)
    12.       {
    13.           Trie* p = root;
    14.           for(char c:word)
    15.           {
    16.               if(p->next[c-'a'] == NULL) p->next[c-'a'] = new Trie();
    17.               p = p->next[c-'a'];
    18.           }
    19.           p->is_end = true;
    20.       }
    21.       //idx为下标 , cnt为可以修改的字符数量 初始为1
    22.       bool dfs(string& word,int idx,Trie* cur,int cnt)
    23.       {
    24.           //cnt必须为0,并且字符串必须结束
    25.           if(idx == word.size()) return cnt == 0 && cur->is_end;
    26.           for(int i=0;i<26;i++)
    27.           {
    28.               if(cur->next[i] == NULL) continue;
    29.               //如果idx位匹配,继续下一个
    30.               if(i == word[idx] - 'a')
    31.               {
    32.                   if(dfs(word,idx+1,cur->next[i],cnt)) return true;
    33.               }
    34.               //如果idx位不匹配,如果还能修改,就修改继续下一个
    35.               else if(cnt>0 && dfs(word,idx+1,cur->next[i],cnt-1)) return true;
    36.           }
    37.           return false;
    38.       }
    39.       void buildDict(vector<string> dictionary) {
    40.           for(string &word:dictionary)
    41.               add(word);
    42.       }
    43.       
    44.       bool search(string searchWord) {
    45.           return dfs(searchWord,0,root,1);
    46.       }
    47.   };
    复制代码

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

正序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

祗疼妳一个

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表