383. 赎金信

题目

这道题和242. 有效的字母异位词类似,很简单。

自己写的:

class Solution {
public:
    bool canConstruct(string ransomNote, string magazine) {
        int hash[26] = {0};
        for (auto c : magazine)
            hash[c - 'a'] += 1;
        for (auto c : ransomNote)
        {
            if (hash[c - 'a'] <= 0)
                return false;
            --hash[c - 'a'];
        }
        return true;
    }
};

然后看了卡哥思路,和我的差不多,不过感觉代码有些地方更优。

卡哥代码:

class Solution {
public:
    bool canConstruct(string ransomNote, string magazine) {
        int record[26] = {0};
        //add
        if (ransomNote.size() > magazine.size()) {
            return false;
        }
        for (int i = 0; i < magazine.length(); i++) {
            // 通过record数据记录 magazine里各个字符出现次数
            record[magazine[i]-'a'] ++;
        }
        for (int j = 0; j < ransomNote.length(); j++) {
            // 遍历ransomNote,在record里对应的字符个数做--操作
            record[ransomNote[j]-'a']--;
            // 如果小于零说明ransomNote里出现的字符,magazine没有
            if(record[ransomNote[j]-'a'] < 0) {
                return false;
            }
        }
        return true;
    }
};

主要是这段代码

 if (ransomNote.size() > magazine.size()) {
            return false;
        }

事先做了个长度的判断,很科学。

posted @ 2025-01-13 16:45  hisun9  阅读(11)  评论(0)    收藏  举报