中等题,题目难度,思路好想
实现一个 MapSum 类,支持两个方法,insert 和 sum:
MapSum() 初始化 MapSum 对象
void insert(String key, int val) 插入 key-val 键值对,字符串表示键 key ,整数表示值 val 。如果键 key 已经存在,那么原来的键值对将被替代成新的键值对。
int sum(string prefix) 返回所有以该前缀 prefix 开头的键 key 的值的总和。
两个函数,一个函数用来插入,如果有相同的键,就用新值替换旧值,没有的话就在后面加。
一个函数用来输出有相同前缀的键值和。
主要还是哈希表的使用方法:附在最后了;
代码如下
#include<iostream>
#include<vector>
#include<algorithm>
#include<unordered_map>
#include<map>
#include<string>
using namespace std;
class MapSum {
public:
unordered_map<string, int> Mymap = {};
MapSum() {
unordered_map<string, int> Mymap = {};
}
void insert(string key, int val) {
auto iter = Mymap.begin();
int j = 0;
while (iter != Mymap.end())
{
if (key == iter->first)
{
iter->second = val;
j = 1;
}
++iter;
}
if (j == 0)
{
Mymap.insert(pair<string, int>(key, val));
}
}
int sum(string prefix) {
auto iter = Mymap.begin();
int k = 0;
while (iter != Mymap.end())
{
int i = 0; int p = 0;
//判断前缀,需要一位一位的去比
for (i = 0; i < prefix.size(); i++)
{
if (prefix[i] == (iter->first)[i])
{
p = 0;
}
else
{
p = 1;
break;
}
}
if (p == 0)
{
k += iter->second;
}
++iter;
}
return k;
}
};
int main()
{
string key = "apple"; int val = 4;
MapSum* obj = new MapSum();
obj->insert(key, val);
int param_2 = obj->sum("ap");
cout << param_2;
system("pause");
return 0;
}