LeetCode·每日一题·1807.替换字符串中的括号内容·哈希

作者:小迅

链接: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)

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

题目

示例

思路

题意 -> 将给定字符串括号内的内容替换为另外内容

题目其实说的非常完全了,直接利用哈希表即可

为了方便查找,我们将 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)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值