Go数据结构

(18)Go实现的trie解答leetcode-677

2019-04-24  本文已影响2人  哥斯拉啊啊啊哦
用数组trie解决
type MapSum struct {
    value int
    next  [26]*MapSum
}

func Constructor() MapSum {
    return MapSum{}
}

func (this *MapSum) Insert(key string, val int) {
    if len(key) == 0 {
        return
    }

    for _, v := range key {
        if this.next[v-97] == nil {
            this.next[v-97] = new(MapSum)
        }
        this = this.next[v-97]
    }
    this.value = val
}

func (this *MapSum) Sum(prefix string) int {
    length := len(prefix)
    if length == 0 {
        return 0
    }

    for i := 0; i < length; i++ {
        if this = this.next[prefix[i]-97]; this == nil {
            return 0
        }
    }
    return this.sumResp()
}

// 求该节点和该节点所有子节点的value的总和
unc (this *MapSum) sumResp() int {
    resp := this.value
    for i := 0; i < 26; i++ {
        if this.next[i] == nil {
            continue
        }
        resp = resp + this.next[i].sumResp()
    }
    return resp
}
测试通过

相关:
1)trie解决leetcode-207:实现trie
https://www.jianshu.com/p/d95153f382f6
2)trie解决leetcode-211:添加与搜索单词
https://www.jianshu.com/p/74103f51aa36

有bug欢迎指出,转载请注明出处。

上一篇 下一篇

猜你喜欢

热点阅读