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: Null
Input: sum("ap"), Output: 3
Input: insert("app", 2), Output: Null
Input: sum("ap"), Output: 5
题目链接:https://leetcode.com/problems/map-sum-pairs/
题目分析:裸Trie,用map记录(string, integer) pair
49ms,时间击败96%
class MapSum {
/** Initialize your data structure here. */
public class Trie {
public Trie[] nxt;
public int cnt;
Trie() {
this.nxt = new Trie[26];
this.cnt = 0;
}
}
public Trie root;
public Map<String, Integer> mp;
public MapSum() {
this.root = new Trie();
this.mp = new HashMap<>();
}
public void insert(String key, int val) {
int pre = 0;
if (this.mp.containsKey(key)) {
pre = this.mp.get(key);
}
this.mp.put(key, val);
Trie p = this.root;
for (int i = 0; i < key.length(); i++) {
int idx = key.charAt(i) - 'a';
if (p.nxt[idx] == null) {
p.nxt[idx] = new Trie();
}
p = p.nxt[idx];
p.cnt += val - pre;
}
}
public int sum(String prefix) {
Trie p = this.root;
for (int i = 0; i < prefix.length(); i++) {
int idx = prefix.charAt(i) - 'a';
if (p.nxt[idx] == null) {
return 0;
}
p = p.nxt[idx];
}
return p.cnt;
}
}
/**
* Your MapSum object will be instantiated and called as such:
* MapSum obj = new MapSum();
* obj.insert(key,val);
* int param_2 = obj.sum(prefix);
*/

本文详细解析了LeetCode上MapSum Pairs问题的解决方案,通过使用Trie树和HashMap来实现高效的插入和求和操作。文章展示了如何利用Trie树存储字符串键,并在每个节点维护一个计数器,以便快速计算以特定前缀开始的所有键值对的总和。
790

被折叠的 条评论
为什么被折叠?



