208.实现 Trie (前缀树)

84 阅读1分钟

题目:
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
}