单词之和-链表法解决
实现一个 MapSum 类,支持两个方法,insert 和 sum:
MapSum() 初始化 MapSum 对象
void insert(String key, int val) 插入 key-val 键值对,字符串表示键 key ,整数表示值 val 。如果键 key 已经存在,那么原来的键值对将被替代成新的键值对。
int sum(string prefix) 返回所有以该前缀 prefix 开头的键 key 的值的总和。
这个题目在平台上是不好做的,因为平台会自动清理内存,所以,平台中可以通过的代码都是用的结构体数组,但是我用这个方法在自己电脑上实现了一下是可以行的通的。感兴趣的可以参考一下。
typedef struct {
char key[20];
int val;
struct MapSum *next;
} MapSum;
MapSum* mapSumCreate() {
MapSum *obj=( MapSum *)malloc(sizeof( MapSum));
obj->next=NULL;
return obj;
}
void mapSumInsert(MapSum* obj, char * key, int val) {
MapSum *m=(MapSum *)malloc(sizeof( MapSum));
MapSum *p=obj->next;
while(p){
if(strcmp(p->key,key)==1){
p->val=val;
break;
}
p=p->next;
}
if(p==NULL){
strcpy(m->key,key);
m->val=val;
m->next=obj->next;
obj->next=m;
}
}
int mapSumSum(MapSum* obj, char * prefix) {
MapSum * p=obj->next;
int sum=0;
int r;
int num=0;
while(p!=NULL){
r=0;
sum=sum+p->val;
p=p->next;
num++;
}
return sum;
}
算法验证如下:
|