677 Map Sum Pairs
677.Map Sum Pairs
1. Question
Input: insert("apple", 3), Output: Null
Input: sum("ap"), Output: 3
Input: insert("app", 2), Output: Null
Input: sum("ap"), Output: 52. Implementation
class MapSum {
class TrieNode {
char val;
int sum;
boolean isWord;
TrieNode[] childNode;
public TrieNode(char val, int sum) {
this.val = val;
this.sum = sum;
childNode = new TrieNode[256];
}
}
class Trie {
TrieNode root;
public Trie() {
root = new TrieNode(' ', 0);
}
public void insert(String word, int sum, boolean overridden) {
if (word == null || word.length() == 0) {
return;
}
TrieNode curNode = root;
for (char c : word.toCharArray()) {
if (curNode.childNode[c] == null) {
curNode.childNode[c] = new TrieNode(c, sum);
}
else {
curNode.childNode[c].sum = overridden ? sum : curNode.childNode[c].sum + sum;
}
curNode = curNode.childNode[c];
}
curNode.isWord = true;
}
public int searchByPrefix(String prefix) {
if (prefix == null || prefix.length() == 0) {
return 0;
}
TrieNode curNode = root;
for (char c: prefix.toCharArray()) {
if (curNode.childNode[c] == null) {
return 0;
}
curNode = curNode.childNode[c];
}
return curNode.sum;
}
}
Set<String> set;
Trie trie;
/** Initialize your data structure here. */
public MapSum() {
set = new HashSet();
trie = new Trie();
}
public void insert(String key, int val) {
trie.insert(key, val, !set.add(key));
}
public int sum(String prefix) {
return trie.searchByPrefix(prefix);
}
}
/**
* Your MapSum object will be instantiated and called as such:
* MapSum obj = new MapSum();
* obj.insert(key,val);
* int param_2 = obj.sum(prefix);
*/3. Time & Space Complexity
Last updated