LeetCode.677 Map Sum Pairs(C++/前缀详解)

博客介绍了实现MapSum类里insert和sum方法的相关内容。insert方法处理键值对,若键已存在则替换;sum方法根据前缀字符串返回对应键值总和。还给出示例,并提到用map对键自动排序,用lower_bound函数查找前缀进行遍历累加。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

实现一个 MapSum 类里的两个方法,insert 和 sum。

对于方法 insert,你将得到一对(字符串,整数)的键值对。字符串表示键,整数表示值。如果键已经存在,那么原来的键值对将被替代成新的键值对。

对于方法 sum,你将得到一个表示前缀的字符串,你需要返回所有以该前缀开头的键的值的总和。

示例 1:

输入: insert(“apple”, 3), 输出: Null
输入: sum(“ap”), 输出: 3
输入: insert(“app”, 2), 输出: Null
输入: sum(“ap”), 输出: 5

map对键自动排序,使用lower_bound函数找到第一个前缀,开始遍历,保证查询字符串始终是在键的头部(刨除asapple这种值),满足要求可以累加。

class MapSum {
public:
    map<string,int>findmap;
    MapSum() {   
    }
    void insert(string key, int val) {
     findmap[key]=val; 
    } //map对key排序
    int sum(string prefix) {
    int valsum=0;         
    //it是个迭代器,it->first是键,it->second是值
    //findmap.lower_bound(prefix)是以prefix为前缀的最小键值对
    for (auto it = findmap.lower_bound(prefix); it != findmap.end();it++){ 
    //it指向最小键值对,开始遍历            
        if (it->first.find(prefix)==0)
        //当在it->first中find到子字符串prefix时返回地址表示是否从首字母开始
        valsum += it->second;
        //满足条件累加
        }         
        return valsum;  
    }
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值