Leetcode 677.键值映射
1 题目描述(Leetcode题目链接)
实现一个 MapSum 类里的两个方法,insert 和 sum。
对于方法 insert,你将得到一对(字符串,整数)的键值对。字符串表示键,整数表示值。如果键已经存在,那么原来的键值对将被替代成新的键值对。
对于方法 sum,你将得到一个表示前缀的字符串,你需要返回所有以该前缀开头的键的值的总和。
输入: insert("apple", 3), 输出: Null
输入: sum("ap"), 输出: 3
输入: insert("app", 2), 输出: Null
输入: sum("ap"), 输出: 5
2 题解
字典树基本操作的实现,可以参照第208题,求和的过程就是一个深度优先搜索,首先找到前缀的最后一个节点,以这个节点为根进行深度优先搜索就可以了。
class TreeNode:
def __init__(self):
self.children = collections.defaultdict(TreeNode)
self.value = 0
class MapSum:
def __init__(self):
"""
Initialize your data structure here.
"""
self.root = TreeNode()
def insert(self, key: str, val: int) -> None:
node = self.root
for char in key:
node = node.children[char]
node.value = val
def sum(self, prefix: str) -> int:
node = self.root
for char in prefix:
node = node.children.get(char)
if not node:
return 0
def dfs(node):
res = node.value
for char in node.children:
res += dfs(node.children[char])
return res
return dfs(node)
# Your MapSum object will be instantiated and called as such:
# obj = MapSum()
# obj.insert(key,val)
# param_2 = obj.sum(prefix)