字典树
字典树是一个良好的查询与存储字典的数据结构,用于查询字符串的前缀。
这里我们看如下图。其中我们对一个树模型,插入abc , abd tl。

我们发现,abc和abd前缀一样。所以前缀ab已经存在过,就没有创建新的节点。
其实就是在root中插入字符,如果发现这个字符没有插入过,我们就用++cnt'创建'一个新的数组 (其中我们把数组当作节点存贮数据)。
其中path[p][26]中 其中[p]代表字符串前一个 [a]字符的下一个[b]字符在那个数组里。其p值存储在path[p][a-'a']中
在我们查找时候 如果发现path[p][字符-'a']为空,说明这个前缀不存在。
const int N = 1e5;
int path[N][26];//26个字母
int cnt = 0;
bool exist[N];
struct trip
{
void insert(string s) {
int p = 0;
for (int i = 0;i < s.size();i++) {
int c = s[i] - 'a';
if (!path[p][c]) {//如果某字符还不存在
path[p][c] = ++cnt;
}
p = path[p][c];
}
exist[p];
}
bool find(string s) {
int p = 0;
for (int i = 0;i < s.size();i++) {
int c = s[i] - 'a';
if (!path[p][c])return 0;
p = path[p][c];
}
return exist[p];
}
};

浙公网安备 33010602011771号