677. 键值映射

103 阅读1分钟

实现一个 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
      
        //遍历当前节点的所有子节点
       
            //只进入不为空的子节点