leetcode 677. Map Sum Pairs
来源:互联网 发布:如何免费申请邮箱域名 编辑:程序博客网 时间:2024/05/21 04:17
677. Map Sum Pairs
Implement a MapSum class with insert
, and sum
methods.
For the method insert
, you'll be given a pair of (string, integer). The string represents the key and the integer represents the value. If the key already existed, then the original key-value pair will be overridden to the new one.
For the method sum
, you'll be given a string representing the prefix, and you need to return the sum of all the pairs' value whose key starts with the prefix.
Example 1:
Input: insert("apple", 3), Output: NullInput: sum("ap"), Output: 3Input: insert("app", 2), Output: NullInput: sum("ap"), Output: 51、这个题的一个难点在于怎么判断是 添加 还是 覆盖。
class TrieNode{ public: char var; int value; bool isword; TrieNode* children[26]; TrieNode() { var = 0; value = 0; isword = 0; memset(children, 0, sizeof(TreeNode*)*26); } TrieNode(char c, int v) { var = c; value = v; isword = 0; memset(children, 0, sizeof(TreeNode*)*26); } }; class MapSum {public: /** Initialize your data structure here. */ MapSum() { root = new TrieNode(); } void insert(string s, int val) { TrieNode* p = root; //先要判断是覆盖还是添加,也就是判断是否存在这个string int isexist = 0; for (int k = 0; k < s.size(); k++) { if (p->children[s[k] - 'a'] != 0) p = p->children[s[k] - 'a']; else break; if (k + 1 == s.size() && p->isword) //说明已经存在 { isexist = p->value; //那就是覆盖 需要先减去原来的值 } } //再改变每个节点的value,有公共前缀的,就把值都加上去。 p = root; for (int k = 0; k < s.size(); k++) { if (p->children[s[k] - 'a'] == 0) { TrieNode* pnew = new TrieNode(s[k], val); p->children[s[k] - 'a'] = pnew; p = p->children[s[k] - 'a']; } else { p = p->children[s[k] - 'a']; p->value += val - isexist; //如果是覆盖,减去原来的值 } if (k + 1 == s.size()) p->isword = true; } } int sum(string s) { TrieNode* p = root; for (int k = 0; k < s.size(); k++) { if (p->children[s[k] - 'a'] != 0) p = p->children[s[k] - 'a']; else return 0; } return p->value; }private: TrieNode* root;};/** * Your MapSum object will be instantiated and called as such: * MapSum obj = new MapSum(); * obj.insert(key,val); * int param_2 = obj.sum(prefix); */
阅读全文
0 0
- leetcode 677. Map Sum Pairs
- leetcode 677. Map Sum Pairs
- leetcode 677. Map Sum Pairs
- LeetCode 677. Map Sum Pairs
- leetcode 677. Map Sum Pairs
- 677. Map Sum Pairs
- 677. Map Sum Pairs
- 677. Map Sum Pairs(JAVA)
- LWC 50:677. Map Sum Pairs
- LeetCode677. Map Sum Pairs
- Map Sum Pairs问题及解法
- 第14周Map Sum Pairs
- LeetCOde OJ Two Sum map应用
- LeetCode 1. Two Sum (c++ stl map)
- 未完成--Sum of Pairs
- [LeetCode]Palindrome Pairs
- LeetCode: Palindrome Pairs
- LeetCode 336. Palindrome Pairs
- Scholar List
- Makefile-- make 运行
- 软件质量保证和测试不常见的问题
- js中this的理解
- ONVIF协议网络摄像机(IPC)客户端程序开发(6):使用gSOAP生成ONVIF框架代码
- leetcode 677. Map Sum Pairs
- SNMP
- 命令行参数
- bash:权限不够
- 窗口大小、滑动窗口
- C语言的那些坑(函数返回局部变量)
- 第十周 【项目2
- PAT乙级1036 跟奥巴马一起学编程
- IDEA快捷键整理