当前位置:   article > 正文

leetcode383.赎金信

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;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30

二、正确代码

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;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

总结

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Monodyee/article/detail/232634
推荐阅读
相关标签
  

闽ICP备14008679号