实现一个 MapSum 类里的两个方法,insert 和 sum。
对于方法 insert,你将得到一对(字符串,整数)的键值对。字符串表示键,整数表示值。如果键已经存在,那么原来的键值对将被替代成新的键值对。
对于方法 sum,你将得到一个表示前缀的字符串,你需要返回所有以该前缀开头的键的值的总和。
示例 1:
输入: insert("apple", 3), 输出: Null
输入: sum("ap"), 输出: 3
输入: insert("app", 2), 输出: Null
输入: sum("ap"), 输出: 5
实现如下
public class Ex677 {
private class Node {
public int value;
public TreeMap<Character, Node> next;
public Node(int value) {
this.value = value;
next = new TreeMap<>();
}
public Node() {
this(0);
}
}
public Node root;
/**
* Initialize your data structure here.
*/
public Ex677() {
root = new Node();
}
public void insert(String key, int val) {
Node cur = root;
for (int i = 0; i < key.length(); i++) {
char c = key.charAt(i);
if (cur.next.get(c) == null) {
cur.next.put(c, new Node());
}
cur = cur.next.get(c);
}
cur.value = val;
}
public int sum(String prefix) {
Node cur = root;
for (int i = 0; i < prefix.length(); i++) {
char c = prefix.charAt(i);
if (cur.next.get(c) == null) {
return 0;
}
cur = cur.next.get(c);
}
return sum(cur);
}
private int sum(Node node) {
int res = node.value;
for (char c : node.next.keySet()) {
res += sum(node.next.get(c));
}
return res;
}
public static void main(String[] args) {
Ex677 test = new Ex677();
test.insert("apple", 3); //输出: Null
System.out.println(test.sum("ap")); //输出: 3
test.insert("app", 2);//输出: Null
System.out.println(test.sum("ap")); //输出: 5
}
}
本文介绍了一个名为MapSum的类的实现,该类包括insert和sum两个方法。insert方法用于插入键值对,并允许更新已存在的键的值;sum方法则返回所有以特定前缀开始的键的值之和。
285

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



