Trie
记录
1:30 2024-2-7
1. Trie
Trie就是一个边上值为字符的树,我看起来觉得像自动机(应该是吧,读入字符转入不同的阶段)
(对我来说需要强调的地方是 数组真是有用的结构,之前看过的代码中使用的结构都比较繁琐点(例如15445project0那个),毕竟是项目数据结构写明确点比较好理解。追求做"算法"题还是这种表示快)
点击查看代码
// 假设字符串由小写字母构成
int trie[SIZE][26], tot = 1;
// Trie的插入
void insert(char* str) {
int len = strlen(str), p = 1;
for (int k = 0; k < len; k++) {
int ch = str[k]-'a';
if (trie[p][ch] == 0) trie[p][ch] = ++tot;
p = trie[p][ch];
}
end[p] = true;
}
// Trie的检索
bool search(char* str) {
int len = strlen(str), p = 1;
for (int k = 0; k < len; k++) {
p = trie[p][str[k]-'a'];
if (p == 0) return false;
}
return end[p];
}