LeetCode打卡

中等题,题目难度,思路好想

实现一个 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;
    }

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值