字符串2&Trie 1/3

我一直以为Trie树是用节点存串的...
好吧是用边存串,节点只是用来维护末尾的
不过好像还可以用这些节点维护额外的信息

然后就是说一下插入:
1.新建一个结点
2.将串中的对对应字符映射到对应的边
3.把现在的节点和新建结点通过映射边连起来

一定要在最后维护结束标记

对应的就是删除:
顺序找,找完删,最后删标记

然后就是查找对应的字符串:
顺着字符串找下去看有没有这样的边
没有就false
到串末如果没结束标记也是false
别的就true了

有一类Trie专门研究01串,就叫01Trie
一般通常解决最大异或和问题

最后,Trie树毕竟是数据结构,可以可持久化,也可以维护别的东西

上一个基本操作的板子

点击查看代码
struct Trie{
	struct node{
		int t[26];
		bool end;
	}t[5000];
	int sum;
	void add(char *s){
		int v,len=strlen(s),u=0;
		for(int i=0;i<len;i++){
			v=s[i]-'a';
			if(!t[u].t[v]){
				t[u].t[v]=++sum;
			}
			u=t[u].t[v];
		}
		t[u].end=1;
	}
	bool find(char *s){
		int u=0,v,len=strlen(s);
		for(int i=0;i<len;++i){
			v=s[i]-'a';
			if(!t[u].t[v]){
				return false;
			}
			u=t[u].t[v];
		}
		if(t[u].end){
			return true;
		}
		return false;
	}
}trie;
posted @   2K22  阅读(49)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
点击右上角即可分享
微信分享提示