前言
欢迎大家积极在评论区留言发表自己的看法,知无不言,言无不尽,养成每天刷题的习惯,也可以自己发布优质的解题报告,供社区一同鉴赏,吸引一波自己的核心粉丝。
今天是七月集训第二十三天:线段树🔥🔥🔥🔥
一、练习题目
二、算法思路
- 1、1032. 字符流:🔥🔥🔥🔥将所给字符逆序插入字典树,在字典树中进行搜索即可。
三、源码剖析
// 1032. 字符流
class StreamChecker {
class TrieNode {
public:
int end;
TrieNode *next[26];
TrieNode() {
end = 0;
memset(next, 0, sizeof(next));
}
};
class Trie {
public:
TrieNode* root;
Trie() {
root = new TrieNode();
}
void insert(string word) {
TrieNode *now = root;
for(int i = 0; i < word.size(); ++i) {
int child = word[i] - 'a';
if(nullptr == now->next[child]) {
now->next[child] = new TrieNode();
}
now = now->next[child];
}
++now->end;
}
bool search(string word) {
TrieNode *now = root;
for(int i = 0; i < word.size(); ++i) {
int child = word[i] - 'a';
if(now->end) {
return true;
}
if(nullptr == now->next[child]) {
return false;
}
now = now->next[child];
}
return now->end;
}
};
public:
Trie T;
string s;
StreamChecker(vector<string>& words) {
for(int i = 0; i < words.size(); ++i) {
reverse(words[i].begin(), words[i].end());
T.insert(words[i]);
}
}
bool query(char letter) {
s += letter;
string findS = "";
for(int i = s.size() - 1; i >= 0; --i) {
findS += s[i];
if(findS.size() > 200) break;
}
return T.search(findS);
}
};
- 1、将所给字符逆序插入字典树,在字典树中进行搜索即可。