type TrieTree struct {
pass int
end int
nexts map[string]*TrieTree
}
func NewTrieTree() *TrieTree {
return &TrieTree{
pass: 0,
end: 0,
nexts: make(map[string]*TrieTree, 32),
}
}
func (t *TrieTree) insert(word string) {
if word == "" {
return
}
strs := strings.Split(word, "")
node := t
node.pass++
for _, str := range strs {
if _, exit := node.nexts[str]; !exit {
node.nexts[str] = NewTrieTree()
}
node = node.nexts[str]
node.pass++
}
node.end++
}
func (t *TrieTree) search(word string) int {
if word == "" {
return 0
}
strs := strings.Split(word, "")
node := t
for _, str := range strs {
if _, exist := node.nexts[str]; !exist {
return 0
}
node = node.nexts[str]
}
return node.end
}
func (t *TrieTree) delete(word string) {
if t.search(word) != 0 {
strs := strings.Split(word, "")
node := t
node.pass--
for _, str := range strs {
node.nexts[str].pass--
if node.nexts[str].pass == 0 {
node.nexts[str] = nil
return
}
node = node.nexts[str]
}
node.end--
}
}
func (t *TrieTree) prefixNumber(pre string) int {
if pre == "" {
return 0
}
strs := strings.Split(pre, "")
node := t
for _, str := range strs {
if _, exist := node.nexts[str]; !exist {
return 0
}
fmt.Println(node)
node = node.nexts[str]
}
return node.pass
}
前缀树
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...