383. 赎金信

给你两个字符串:ransomNote 和 magazine ,判断 ransomNote 能不能由 magazine 里面的字符构成。

如果可以,返回 true ;否则返回 false 。

magazine 中的每个字符只能在 ransomNote 中使用一次。

复制代码
 1 class Solution {
 2 public:
 3     bool canConstruct(string ransomNote, string magazine) {
 4         unordered_map<char, int> mp;
 5         unordered_map<char, int> mp1;
 6         //记录magazine里面出现的字符个数
 7         for (const auto& ch : magazine)
 8         {
 9             mp[ch]++;
10         }
11         //记录ransomnote出现的字符个数
12         for (const auto& ch : ransomNote)
13         {
14             mp1[ch]++;
15         }
16         //比较mp和mp1,只有mp1所有的字符个数都小于等于mp,才返回true
17         for (const auto& ch : mp1)
18         {
19             if (mp.find(ch.first) == mp.end() || ch.second > mp.find(ch.first)->second)
20             {
21                 return false;
22             }
23         }
24         return true;
25     }
26     bool canConstruct(string ransomNote, string magazine) {
27         int record[26] = { 0 };
28         //add
29         if (ransomNote.size() > magazine.size()) {
30             return false;
31         }
32         for (int i = 0; i < magazine.length(); i++) {
33             // 通过recode数据记录 magazine里各个字符出现次数
34             record[magazine[i] - 'a'] ++;
35         }
36         for (int j = 0; j < ransomNote.length(); j++) {
37             // 遍历ransomNote,在record里对应的字符个数做--操作
38             record[ransomNote[j] - 'a']--;
39             // 如果小于零说明ransomNote里出现的字符,magazine没有
40             if (record[ransomNote[j] - 'a'] < 0) {
41                 return false;
42             }
43         }
44         return true;
45     }
46 
47 };
复制代码

 

posted @   xiazichengxi  阅读(10)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
点击右上角即可分享
微信分享提示
主题色彩