实现一个 MapSum 类里的两个方法,insert 和 sum。
- 对于方法 insert,你将得到一对(字符串,整数)的键值对。字符串表示键,整数表示值。如果键已经存在,那么原来的键值对将被替代成新的键值对。
- 对于方法 sum,你将得到一个表示前缀的字符串,你需要返回所有以该前缀开头的键的值的总和。
示例 1:
输入: insert("apple", 3), 输出: Null
输入: sum("ap"), 输出: 3
输入: insert("app", 2), 输出: Null
输入: sum("ap"), 输出: 5
题解:这道题的难点在于sum方法,需要返回所有以该前缀开头的键的值的总和,很容易就想到使用上道题的前缀树来做。
class MapSum {
/** Initialize your data structure here. */
//自定义前缀树节点
//根节点为空
//从根节点出发
//判断当前字符是否已经存储过,存储过就跳过,否则新建
//注意这里的空节点,不能采用Node tmp = pre.childs[index]的形式来判断,会出现空指针异常
//添加完之后,标记置为true
//遍历到prefix的最后一位字符所在的Node
//找到当前字符所在的Node位置
//如果不存在prefix这个前缀,返回0
//base case
//将当前节点值添加到sum
//遍历当前节点的所有子节点
//只进入不为空的子节点