leetcode 677. Map Sum Pairs

原题:

Implement a MapSum class with insert, and sum methods.

For the method insert, you'll be given a pair of (string, integer). The string represents the key and the integer represents the value. If the key already existed, then the original key-value pair will be overridden to the new one.

For the method sum, you'll be given a string representing the prefix, and you need to return the sum of all the pairs' value whose key starts with the prefix.

Example 1:

Input: insert("apple", 3), Output: Null
Input: sum("ap"), Output: 3
Input: insert("app", 2), Output: Null
Input: sum("ap"), Output: 5

代码如下:

typedef struct {
    char* string;
    int value;
    struct MapSum* next;
} MapSum;

/** Initialize your data structure here. */
MapSum* mapSumCreate() {
    MapSum* head;
    head=(MapSum*)malloc(sizeof(MapSum));
    head->next=NULL;
    return head;
}

void mapSumInsert(MapSum* obj, char* key, int val) {
    MapSum* p;
    p=obj->next;
    while(p!=NULL)
    {
        if(strlen(p->string)==strlen(key)&&strstr(key,p->string)!=NULL)
        {
            p->value=val;
            return;
        }
        p=p->next;
    }
    p=(MapSum*)malloc(sizeof(MapSum));
    p->string=(char*)malloc(sizeof(char)*(strlen(key)+1));
    strcpy(p->string,key);
    p->value=val;
    p->next=obj->next;
    obj->next=p;
}

int mapSumSum(MapSum* obj, char* prefix) {
    int sum=0;
    MapSum* p;
    p=obj->next;
    while(p!=NULL)
    {
        if(strstr(p->string,prefix)==p->string)
        {
            sum+=p->value;
        }
        p=p->next;
    }
    return sum;
}

void mapSumFree(MapSum* obj) {
    MapSum* p;
    p=obj;
    obj=obj->next;
    free(p);
    while(obj!=NULL)
    {
        p=obj;
        obj=obj->next;
        free(p->string);
        free(p);
    }
}

/**
 * Your MapSum struct will be instantiated and called as such:
 * struct MapSum* obj = mapSumCreate();
 * mapSumInsert(obj, key, val);
 * int param_2 = mapSumSum(obj, prefix);
 * mapSumFree(obj);
 */
写个链表搞定一切。。。 其实重要的还是内存控制。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值