程帅霞

不断受挫,不停起身,不断追寻,不止AC~~

导航

Trie学习总结

Trie树学习总结

字典树,又称前缀树,是用于快速处理字符串的问题,能做到快速查找到一些字符串上的信息。

另外,Trie树在实现高效的同时,会损耗更多的空间,所以Trie是一种以空间换时间的算法。

定义

1 struct kkk{
2     int son[27],cnt;
3     bool flag;
4 }trie[maxn];

首先是插入操作:

 1 void insert(string s)
 2 {
 3     int len=s.size(),u=0; //获取长度len,u是当前点的编号,根的编号是0
 4     for(int i=0;i<len;i++)
 5     {
 6         int v=s[i]-'a';//获取位置
 7         if(!trie[u].son[v]) //如果没有继续下去的节点
 8         trie[u].son[v]=++num;//就新建一个
 9         u=trie[u].son[v];//跳到下一个点去插入
10     }
11     trie[u].flag=true; //标记此处是一个单词
12 }

然后是查询操作:

 1 int find(string s){
 2     int len=s.size(),u=0;
 3     for(int i=0;i<len;i++){
 4         int v=s[i]-'a';     //同上
 5         if(!trie[u].son[v])return 3;    //找不到返回没有
 6         u=trie[u].son[v];   //同上
 7     }
 8     if(trie[u].flag==false)return 3;    //不是一个单词就返回没有
 9     if(!trie[u].cnt){       //如果没有被点过
10         trie[u].cnt++;      //标记被点过了
11         return 1;           //返回有
12     } return 2;         //不然返回重复
13 }

https://www.cnblogs.com/hyfhaha/p/10684418.html

posted on 2020-11-02 20:18  程帅霞  阅读(123)  评论(0编辑  收藏  举报