leetcode 677. Map Sum Pairs

来源:互联网 发布:云计算在教育科研领域 编辑:程序博客网 时间:2024/06/04 21:57

原题:

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: NullInput: sum("ap"), Output: 3Input: insert("app", 2), Output: NullInput: 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); */
写个链表搞定一切。。。 其实重要的还是内存控制。

原创粉丝点击