题目:
Trie(发音类似 "try")或者说 前缀树 是一种树形数据结构,用于高效地存储和检索字符串数据集中的键。这一数据结构有相当多的应用情景,例如自动补完和拼写检查。
算法:
type Trie struct {
node []*Trie // 转换index代表a-z
isVal bool
}
func Constructor() Trie {
return Trie{node: make([]*Trie, 26)}
}
func (this *Trie) Insert(word string) {
curNode := this
for i := range word {
if curNode.node[word[i] - 'a'] == nil {
node := Constructor()
curNode.node[word[i] - 'a'] = &node
}
curNode = curNode.node[word[i] - 'a']
}
curNode.isVal = true
}
func (this *Trie) Search(word string) bool {
curNode := this
for i := range word {
if curNode.node[word[i] - 'a'] == nil {
return false
}
curNode = curNode.node[word[i] - 'a']
}
if !curNode.isVal {
return false
}
return true
}
func (this *Trie) StartsWith(prefix string) bool {
curNode := this
for i := range prefix {
if curNode.node[prefix[i] - 'a'] == nil {
return false
}
curNode = curNode.node[prefix[i] - 'a']
}
return true
}