作者:小迅
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
题目
示例
思路
题意 -> 将给定字符串括号内的内容替换为另外内容
题目其实说的非常完全了,直接利用哈希表即可
为了方便查找,我们将 knowledge 保存到哈希表 dict 中。字符串 s 中有四种类型的字符:
字符 ‘(’`
字符 ‘)’`
不在括号内的小写字母
在括号内的小写字母
直接遍历字符串枚举中的所有元素,如果为 () 则在哈希表中寻找 括号内的小写字母 将其替换 再写入 新数组,不在括号内的小写字母则直接写入 新数组
leetcode为了使用方便,大部分标准库的头文件已经被自动导入。如想使用哈希表运算, 您可以使用 uthash。 "uthash.h"已经默认被导入,
代码
struct my_struct {
const char *key; /* key */
const char *value;
UT_hash_handle hh; /* makes this structure hashable */
};
char * evaluate(char * _s, char *** knowledge, int knowledgeSize, int* knowledgeColSize){
struct my_struct *s, *tmp, *users = NULL;
for (int i = 0; i < knowledgeSize; ++i) {//对于键值加入
s = (struct my_struct *)malloc(sizeof *s);
s->key = knowledge[i][0];
s->value = knowledge[i][1];
HASH_ADD_KEYPTR(hh, users, s->key, strlen(s->key), s);
}
int i, j;
char *res = (char *)malloc(sizeof(char) * (strlen(_s) + 1));
memset(res, 0, strlen(_s) + 1);
for (i = 0, j = 0; i < strlen(_s); ++i) {//枚举每一个元素
int len = 0;
if ('(' ==_s[i]) {//括号则替换
while (_s[len+i] != ')') {
len++;
}
char buf[len];
strncpy(buf, _s+i+1, len-1);
buf[len-1] = '\0';
HASH_FIND_STR(users, buf, s);
if (s) {
for (int n = 0; n < strlen(s->value); ++n) {
res[j++] = s->value[n];
}
} else {
res[j++] = '?';
}
i += len;
printf("%s ", buf);
} else {//不是则直接写入
res[j++] = _s[i];
}
}
/* free the hash table contents */
HASH_ITER(hh, users, s, tmp) {//销毁哈希表
HASH_DEL(users, s);
free(s);
}
return res;
}
作者:小迅
链接:https://leetcode.cn/problems/evaluate-the-bracket-pairs-of-a-string/solutions/2058278/ha-xi-biao-zhu-shi-chao-ji-xiang-xi-by-x-5pj6/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。