LeetCode 211. Add and Search Word - Data structure design

本文介绍了一种Trie树的数据结构实现,并提供了添加单词和搜索包含通配符的单词的功能。通过C++代码示例详细展示了如何构建Trie树并进行高效查找。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#include <vector>
#include <string>
#include <iostream>
using namespace std;

/* This is a trie implemention */
class TrieNode {
public:
  bool isWord;
  vector<TrieNode*> child;
  TrieNode() : isWord(false) {child.assign(26, NULL);}
};

class Trie {
private:
  bool searchWord(string& word, TrieNode* p, int index) {
    if(p == NULL) return false;
    if(idx == word.size()) return p->isWord;
    if(word[index] == '.') {  // skip it!
        for(auto q : p->child) {
          if(searchWord(word, q, index+1)) return true;
        }
      return false;
    } else {
      return searchWord(word, p->child[word[index] - 'a'], index + 1);
    }
  }
public:
  Trie() {
    root = new TrieNode();
  }
  /* adds a word into the data structure. */
  void addWord(string word) {
    TrieNode* p = root;
    for(auto c : word) {
      int index = c - 'a';
      if(p->child[index] == NULL) {
        p->child[index] = new TrieNode();
      }
      p = p->child[index];
    }
    p->isWord = true;
  }

  /* 
    Returns if the word is in the data structure. A word cound
    contain the dot character '.' to represent any one letter.
  */
  bool search(string word) {
    return searchWord(word, root, 0);
  }
};


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值