1. 题目

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

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

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

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

2. Trie树解题

参考:Trie树

class TrieNode
{public:TrieNode *next[26];int count;TrieNode():count(0){memset(next,NULL,26*sizeof(TrieNode*));}~TrieNode(){}
};class MapSum {TrieNode *root;
public:/** Initialize your data structure here. */MapSum() {root = new TrieNode();}void insert(string key, int val) {TrieNode *cur = root;for(char ch:key){if(cur->next[ch-'a'] == NULL)cur->next[ch-'a'] = new TrieNode();cur = cur->next[ch-'a'];}cur->count = val;}int sum(string prefix) {TrieNode *cur = root;for(char ch:prefix){if(cur->next[ch-'a'] == NULL)return 0;elsecur = cur->next[ch-'a'];}int sumVal = 0;sumVal += cur->count;for(int i = 0; i < 26; ++i)if(cur->next[i])sumVal += sum(cur->next[i]);return sumVal;}
private:int sum(TrieNode *root)//递归求和{int subsum = 0;if(root == NULL)return 0;subsum += root->count;for(int i = 0; i < 26; ++i)if(root->next[i])subsum += sum(root->next[i]);return subsum;}
};

class trie{ // 2021.8.28
public:int v = 0;trie* next[26] = {NULL};void insert(string& s, int val){trie* cur = this;for(auto ch : s){if(!cur->next[ch-'a'])cur->next[ch-'a'] = new trie();cur = cur->next[ch-'a'];}cur->v = val;}void find(trie* root, string& s, int i, int &sum){if(!root) return;if(i<s.size()&&root->next[s[i]-'a'])find(root->next[s[i]-'a'], s, i+1, sum);else if(i==s.size()){sum += root->v;for(int j = 0; j < 26; ++j){if(root->next[j]){find(root->next[j], s, i, sum);}}}}
};
class MapSum {trie* root;
public:/** Initialize your data structure here. */MapSum() {root = new trie();}void insert(string key, int val) {root->insert(key,val);}int sum(string prefix) {int tot = 0;root->find(root, prefix, 0, tot);return tot;}
};/*** Your MapSum object will be instantiated and called as such:* MapSum* obj = new MapSum();* obj->insert(key,val);* int param_2 = obj->sum(prefix);*/

LeetCode677. 键值映射(Trie树)相关推荐

  1. 字典树/Trie/前缀树-LeetCode总结:720词典中最长的单词;127. 单词接龙;677. 键值映射;面试题 17.17. 多次搜索;648. 单词替换

    MyTrie结构体和相关操作函数 typedef struct MyTrie {bool is_word;vector<MyTrie*> next;MyTrie():is_word(fal ...

  2. 【快乐水题】677. 键值映射

    原题: 力扣链接:677. 键值映射 题目简述: 实现一个 MapSum 类,支持两个方法,insert 和 sum: MapSum() 初始化 MapSum 对象 void insert(Strin ...

  3. Unity中的输入事件总结与数字电视遥控器键值映射

    版权声明:欢迎批评指正,转载请务必注明原文链接:欢迎文章下公开讨论. https://blog.csdn.net/cordova/article/details/51036547 一.Unity的基本 ...

  4. 键盘动态库开发(修改键值映射和键盘灯控制)

    键盘动态库开发(修改键值映射和键盘灯控制) 开发需求 键盘DLL功能 1. 键盘OPEN 2. 键盘CLOSE 3. 键盘灯控制 4. 键值抓取 开发需求 需求:开发一款9键键盘DLL和演示程序,要求 ...

  5. LeetCode 1707. 与数组中元素的最大异或值(Trie树)

    文章目录 1. 题目 2. 解题 1. 题目 给你一个由非负整数组成的数组 nums .另有一个查询数组 queries ,其中 queries[i] = [xi, mi] . 第 i 个查询的答案是 ...

  6. 安卓按键键值映射关系

    1.vendor或者device 目录或者framework下有一些.kl文件定义键值 2.kl文件命名为规则为Vendor_2717_Product_32b0.kl 其中2717 和32b0可以通过 ...

  7. LeetCode 421. 数组中两个数的最大异或值(Trie树)

    1. 题目 给定一个非空数组,数组中元素为 a0, a1, a2, - , an-1,其中 0 ≤ ai < 231 . 找到 ai 和aj 最大的异或 (XOR) 运算结果,其中0 ≤ i, ...

  8. leetcode 677. Map Sum Pairs | 677. 键值映射(Trie前缀树,BFS)

    题目 https://leetcode.com/problems/map-sum-pairs/ 题解 基于前缀树实现,可以参考:leetcode 208. Implement Trie (Prefix ...

  9. MDG删除客户主数据key mapping(键值映射)

    背景 同事导客户编码的key mapping弄错了,想要删除,但是执行程序FINS_CFIN_MAPPING一直报结构不匹配. 解决方案 生成模板并下载,分隔符选择逗号 填入需要删除的key mapp ...

最新文章

  1. 计算机组成原理 — IPMI/BMC
  2. ConcurrentMap接口
  3. 很好的阻止了事件的发生_请定好您的闹钟,八月,夜空中将发生这13件超酷的天文事件...
  4. springboot mysql时区设置_java/springboot/mysql时区问题解决方案
  5. .net core 引用jar_Python一键转Jar包,Java调用Python新姿势!
  6. oracle rowed,oracle bitmap索引内部揭密,欢迎补充
  7. 合肥天鹅湖万达广场机器人_合肥租房价位及租房地理位置推荐
  8. web后端http协议使用过程中安全防范及https协议实现原理
  9. com.mysql.jdbc.exceptions.jdbc4.CommunicationsException:
  10. springboot整合富文本编辑器
  11. 文件名的命名规则是什么
  12. android x86 usb检查不到,【android9.0】system/core下的usbhost模块无法输出log到logcat
  13. 如何快速撰写/总结国内外研究现状?
  14. MySQL 有哪些锁?
  15. ONLYOFFICE Docs如何与NEXTCLOUD 24连接集成
  16. 授人以渔:分享我的算法学习经验
  17. Dem与遥感影像制作三维效果简单教程
  18. pair用法(给元素赋值)
  19. 国内专业垂直搜索引擎汇总
  20. RESTful API 末尾斜杠

热门文章

  1. s5pv210——I2C基础详解、I2C时序详解
  2. 交流电的有效值rms值_【电工基础知识:三、正弦交流电的产生】2正弦交流电的三要素...
  3. Babel+vscode实现APICloud开发中兼容ES6及以上代码
  4. CCF 201712-3 Crontab
  5. cas-client登录后报INVALID_PROXY_CALLBACK
  6. Android面试总结经
  7. Txt格式配置表无法解析的问题——BOM
  8. 统一编址 独立编址 寻址空间
  9. timer.schedule定时器用法
  10. discuz程序的阅读(1)