只要把模版中的 bool isEnd 改成 int isEnd,同时主要 search 的返回值要改成 int
#include <iostream>
using namespace std;
class Trie {
private:
//每个Trie节点有一个isEnd变量, 一个包含26个指针的p数组
Trie *p[26] = {nullptr}; // 必须给初值
int isEnd = 0;
public:
Trie() { // 默认构造函数
}
// 插入单词
void insert(const string &word) {
Trie *root = this; // root指向当前构造的 trie 树的第一个 Trie 结点
for (const auto &ch : word) {
char w = ch - 'a';
if (root->p[w] == nullptr) root->p[w] = new Trie();
root = root->p[w]; // root 指针跳到下一个箭头
}
// 出循环后root是指向没有名字 Trie 结点的那个箭头
root->isEnd ++;
}
// 查找单词
int search(const string &word) {
Trie *root = this;
for (const auto &ch : word) {
char w = ch - 'a';
if (root->p[w] == nullptr) return 0;
root = root->p[w];
}
return root->isEnd; // 包含了前缀的情况
}
};
/* Trie类使用方法
Trie obj;
obj.insert(word);
bool ans1 = obj->search(word);
bool ans2 = obj->startWith(prefix);
*/
int main() {
int n;
cin >> n;
Trie obj;
while (n --) {
string op,s;
cin >> op >> s;
if (op == "I") obj.insert(s);
else cout << obj.search(s) << endl;
}
return 0;
}