(16)Go实现的trie解答leetcode-207
2019-04-24 本文已影响1人
哥斯拉啊啊啊哦
![](https://img.haomeiwen.com/i15203565/690f4e4472f5a930.jpg)
实现代码
type Trie struct {
isWord bool
next map[rune]*Trie
}
/** Initialize your data structure here. */
func Constructor() Trie {
return Trie{
isWord:false,
next: make(map[rune]*Trie),
}
}
/** Inserts a word into the trie. */
func (this *Trie) Insert(word string) {
if len(word) == 0 {
return
}
cur := this
for _, v := range word {
_, ok := cur.next[v] // 在NewTrie中已经初始化
if !ok {
cur.next[v] = &Trie{false, map[rune]*Trie{}}
}
cur = cur.next[v]
}
cur.isWord=true
}
/** Returns if the word is in the trie. */
func (this *Trie) Search(word string) bool {
if len(word) == 0 {
return false
}
cur := this
for _, v := range word {
t1, ok := cur.next[v]
if !ok {
return false
}
cur = t1
}
return cur.isWord
}
/** Returns if there is any word in the trie that starts with the given prefix. */
func (this *Trie) StartsWith(prefix string) bool {
if len(prefix) == 0 {
return true
}
cur := this
for _, v := range prefix {
t1, ok := cur.next[v]
if !ok {
return false
}
cur = t1
}
return true
}
![](https://img.haomeiwen.com/i15203565/df0fd0ccd6cfcd3e.jpg)
测试通过,由于是用map实现的,所以速度性能一般,map的速度听别人说比数组慢100倍
相关:
1)trie解决leetcode-211:添加与搜索单词
https://www.jianshu.com/p/74103f51aa36
2)trie解决leetcode-677:键值映射
https://www.jianshu.com/p/dd247d5591a2
有bug欢迎指出,转载请注明出处。