这篇文章主要介绍“算法中trie怎么实现”,在日常操作中,相信很多人在算法中trie怎么实现问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”算法中trie怎么实现”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!
算法:
前缀树主要用于搜索算法,思想和实现并不复杂,属于典型题目,算法如下所示:
1.最多 n个指向子结点的链接,其中每个链接对应字母表数据集中的一个字母,本文中假定 n 为 26,小写拉丁字母的数量。2.布尔字段,以指定节点是对应键的结尾还是只是键前缀
代码实现:
type Trie struct {
IsEnd bool
Link [26]*Trie
}
/** Initialize your data structure here. */
func Constructor() Trie {
root := Trie{}
return root
}
/** Inserts a word into the trie. */
func (this *Trie) Insert(word string) {
var node *Trie = this
for _, w := range []byte(word) {
if node.Link[w - byte('a')] == nil {
n := Trie{}
node.Link[w - byte('a')] = &n
}
node = node.Link[w - byte('a')]
}
node.IsEnd = true
return
}
/** Returns if the word is in the trie. */
func (this *Trie) Search(word string) bool {
var node *Trie = this
for _, w := range []byte(word) {
if node.Link[w - byte('a')] == nil {
node = nil
break
}
node = node.Link[w - byte('a')]
}
return node != nil && node.IsEnd
}
/** Returns if there is any word in the trie that starts with the given prefix. */
func (this *Trie) StartsWith(prefix string) bool {
var node *Trie = this
for _, w := range []byte(prefix) {
if node.Link[w - byte('a')] == nil {
node = nil
break
}
node = node.Link[w - byte('a')]
}
return node != nil
}
/**
* Your Trie object will be instantiated and called as such:
* obj := Constructor();
* obj.Insert(word);
* param_2 := obj.Search(word);
* param_3 := obj.StartsWith(prefix);
*/
执行结果:
到此,关于“算法中trie怎么实现”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注亿速云网站,小编会继续努力为大家带来更多实用的文章!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。