力扣编程题分析(383):赎金信

题目描述
给定一个赎金信 (ransom) 字符串和一个杂志(magazine)字符串,判断第一个字符串ransom能不能由第二个字符串magazines里面的字符构成。如果可以构成,返回 true ;否则返回 false。
在这里插入图片描述
思路:如果赎金信字符串长度大于杂志字符串长度,那么一点不能满足要求,返回false。如果赎金信字符串长度小于等于杂志字符串长度,那么先遍历赎金信字符串,用一个大小为26的数组count记录每个字母的个数,然后遍历杂志字符串,每一次遍历,将该次遍历中的字母在count数组中对应位置的元素的值减一。这样,最后遍历count数组,如果所有元素都小于或等于0,则代表满足要求,只要遇到一个元素大于0,则代表不满足要求,程序返回false。

bool canConstruct(char * ransomNote, char * magazine)
{
    if (strlen(ransomNote) > strlen(magazine))
    {
        return false;
    }
    else
    {
        int i = 0;
        int count[26] = {0};
        for (i = 0; ransomNote[i] != '\0'; ++i)
        {
            ++(count[(ransomNote[i] - 'a')]);
        }
        for (i = 0; magazine[i] != '\0'; ++i)
        {
            --(count[(magazine[i] - 'a')]);
        }
        for (i = 0; i < 26; ++i)
        {
            if (count[i] > 0)
            {
                return false;
            }
        }
        return true;
    }
}
发布了29 篇原创文章 · 获赞 11 · 访问量 579
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览