leetcode383.赎金信

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

从零开始刷leetcode,第二题383.赎金信


一、第一次出错

大体思路除了稍显繁琐之外,还有些问题。
1.memset函数的应用
memset(ary,num,sizeof());
sizeof()指变量和数据类型的字节大小,一个int型占4个字节,在memset函数里只填一个26是不正确的,可以填26*4或者sizeof(aryR)。
2.数组应该选择一个即可,可采用加减的方式,判断这个数组中是否有小于零的数来判断magazine中是否有足够的字符构成ransomNote中的字符。
3.最后判断是否能够构成的时候,不必在break之后再额外判断一次能否构成,可以在条件触发时,直接返回false。

bool canConstruct(char * ransomNote, char * magazine){
    int aryR[26];
    int aryM[26];
    memset(aryR,0,26);
    memset(aryM,0,26);

    int i = 0;
    int x;
    while(ransomNote[i] != '\0'){
        x = ransomNote[i] - 'a';
        aryR[x]++;
        i++;
    }
    i = 0;
    while(magazine[i] != '\0'){
        x = magazine[i] - 'a';
        aryM[x]++;
        i++;
    }

    i = 0;
    while(aryR[i] != '\0'){
        if(aryM[i] < aryR[i])
            break;
        i++;
    }
    if(i<26)
        return false;
    return true;
}

二、正确代码

size strlen(const char str);
返回一个字符串的长度。

bool canConstruct(char * ransomNote, char * magazine){
    int aryR[26];
    memset(aryR, 0, sizeof(aryR));
    int i;
    for(i=0; i<strlen(magazine); i++){
        aryR[magazine[i] - 'a']++;
    }

    for(i=0; i<strlen(ransomNote); i++){
        aryR[ransomNote[i] - 'a']--;
        if(aryR[ransomNote[i] - 'a'] < 0)
            return false;
    }
    return true;
}

总结

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值