[Leetcode]677.Map Sum Pairs

链接:LeetCode677

实现一个 MapSum 类里的两个方法,insert 和 sum。

对于方法 insert,你将得到一对(字符串,整数)的键值对。字符串表示键,整数表示值。如果键已经存在,那么原来的键值对将被替代成新的键值对。

对于方法 sum,你将得到一个表示前缀的字符串,你需要返回所有以该前缀开头的键的值的总和。

示例 1:

输入: insert("apple", 3), 输出: Null
输入: sum("ap"), 输出: 3
输入: insert("app", 2), 输出: Null
输入: sum("ap"), 输出: 5

相关标签:字典树

又是一道典型的字典树类型题。这里的关键点是在节点中保存数值,最后累加即可。

代码如下:

python:

import collections
class Node():
    def __init__(self):
        self.children = collections.defaultdict(lambda:Node())
        self.num = 0

class Trie():
    def __init__(self):
        self.root = Node()
        
    def insert(self,word,num):
        cur = self.root
        for w in word:
            cur = cur.children[w]
        cur.num = num

    def getSum(self,word):
        cur = self.root
        for w in word:
            cur = cur.children[w]
        return self.getNum(cur)


    def getNum(self,cur):
        res = cur.num
        for child in cur.children:
            res += self.getNum(cur.children[child])
        return res



class MapSum:
    def __init__(self):
        """
        Initialize your data structure here.
        """
        self.tree = Trie()

    def insert(self, key: str, val: int) -> None:
        self.tree.insert(key,val)

    def sum(self, prefix: str) -> int:
        return self.tree.getSum(prefix)


# Your MapSum object will be instantiated and called as such:
# obj = MapSum()
# obj.insert(key,val)
# param_2 = obj.sum(prefix)
posted @ 2020-02-06 16:13  Jamest  阅读(131)  评论(0编辑  收藏  举报