LeetCode383. 赎金信

https://leetcode-cn.com/problems/ransom-note/

给定一个赎金信 (ransom) 字符串和一个杂志(magazine)字符串,判断第一个字符串ransom能不能由第二个字符串magazines里面的字符构成。如果可以构成,返回 true ;否则返回 false。

(题目说明:为了不暴露赎金信字迹,要从杂志上搜索各个需要的字母,组成单词来表达意思。)

注意:
你可以假设两个字符串均只含有小写字母。
canConstruct(“a”, “b”) -> false
canConstruct(“aa”, “ab”) -> false
canConstruct(“aa”, “aab”) -> true

思路:利用字母数组下标即可

bool canConstruct(char* ransomNote, char* magazine) {
    if(NULL == ransomNote || NULL == magazine){
        return false;
    }
    
    int letter[26] = {0}; // a-z字母
    int i = 0;
    
    int rlen = strlen(ransomNote);
    int mlen = strlen(magazine);
    if(rlen > mlen){
        return false;
    }
    
    for(i = 0; i < mlen; i++){
        letter[*magazine++ - 'a']++;
        if(i <= rlen - 1){
            letter[*ransomNote++ - 'a']--;
        }
    }
    
    for(i = 0; i < 26; i++){
        if(letter[i] < 0){
            return false;
        }
    }
    return true;
}

猜你喜欢

转载自blog.csdn.net/qq_34595352/article/details/88058750
今日推荐