字典树

字典树是一个良好的查询与存储字典的数据结构,用于查询字符串的前缀。

这里我们看如下图。其中我们对一个树模型,插入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];
	}

};
posted @ 2024-12-14 20:57  安娜アンナ  阅读(17)  评论(0)    收藏  举报