力扣676.实现一个魔法字典

力扣676.实现一个魔法字典

  • 字典树 + dfs

cpp 复制代码
  class Trie
  {
      public:
      Trie* next[26];
      bool is_end = false;
  };
  class MagicDictionary {
  public:
      Trie* root = new Trie();
      
      void add(string& word)
      {
          Trie* p = root;
          for(char c:word)
          {
              if(p->next[c-'a'] == NULL) p->next[c-'a'] = new Trie();
              p = p->next[c-'a'];
          }
          p->is_end = true;
      }
      //idx为下标 , cnt为可以修改的字符数量 初始为1
      bool dfs(string& word,int idx,Trie* cur,int cnt)
      {
          //cnt必须为0,并且字符串必须结束
          if(idx == word.size()) return cnt == 0 && cur->is_end;
          for(int i=0;i<26;i++)
          {
              if(cur->next[i] == NULL) continue;
              //如果idx位匹配,继续下一个
              if(i == word[idx] - 'a')
              {
                  if(dfs(word,idx+1,cur->next[i],cnt)) return true;
              }
              //如果idx位不匹配,如果还能修改,就修改继续下一个
              else if(cnt>0 && dfs(word,idx+1,cur->next[i],cnt-1)) return true;
          }
          return false;
      }
      void buildDict(vector<string> dictionary) {
          for(string &word:dictionary)
              add(word);
      }
      
      bool search(string searchWord) {
          return dfs(searchWord,0,root,1);
      }
  };
相关推荐
执子手 吹散苍茫茫烟波16 分钟前
leetcode415. 字符串相加
java·leetcode·字符串
百度Geek说1 小时前
第一!百度智能云领跑视觉大模型赛道
算法
big_eleven1 小时前
轻松掌握数据结构:二叉树
后端·算法·面试
big_eleven1 小时前
轻松掌握数据结构:二叉查找树
后端·算法·面试
CoovallyAIHub1 小时前
农田扫描提速37%!基于检测置信度的无人机“智能抽查”路径规划,Coovally一键加速模型落地
深度学习·算法·计算机视觉
执子手 吹散苍茫茫烟波1 小时前
LCR 076. 数组中的第 K 个最大元素
leetcode·排序算法
kyle~2 小时前
OpenCV---特征检测算法(ORB,Oriented FAST and Rotated BRIEF)
人工智能·opencv·算法
初学小刘3 小时前
决策树:机器学习中的强大工具
算法·决策树·机器学习
山顶风景独好3 小时前
【Leetcode】随笔
数据结构·算法·leetcode
lxmyzzs4 小时前
【图像算法 - 16】庖丁解牛:基于YOLO12与OpenCV的车辆部件级实例分割实战(附完整代码)
人工智能·深度学习·opencv·算法·yolo·计算机视觉·实例分割