leetcode:383.赎金信
编辑
47
2024-03-30
Leetcode题目链接:383. 赎金信
题目描述:
给你两个字符串:ransomNote
和 magazine
,判断 ransomNote
能不能由 magazine
里面的字符构成。
如果可以,返回 true
;否则返回 false
。magazine
中的每个字符只能在 ransomNote
中使用一次。
解题思路:
使用哈希表(unordered_map)统计a-z字符出现的次数
对magazine
字符串进行处理,利用哈希表中的count()方法判断是否存在字符
若存在则相应字母数量+1
若不存在则使用emplace()方法创建相应的键值对,并将该字母的初始数量置为0
对ransomNote
字符串进行处理,利用哈希表中的count()方法判断是否存在字符
若存在则相应字母数量-1
若不存在则返回false,意味着无法使用magazine
中的字符构成ransomNote
字符串(包括不存在该字母或字母不够用的情况)
我的答案:
class Solution {
public:
bool canConstruct(string ransomNote, string magazine) {
int n = magazine.size();
int m = ransomNote.size();
unordered_map<char, int> map;
for(int i = 0;i < n;i++){
if(map.count(magazine[i]))map[magazine[i]]++;
else map.emplace(magazine[i], 0);
}
for(int i = 0;i < m;i++){
if(map.count(ransomNote[i])){
if(map[ransomNote[i]] >= 0){
map[ransomNote[i]]--;
}else{
return false;
}
}
else return false;
}
return true;
}
};
提交结果:
官方答案:
class Solution {
public:
bool canConstruct(string ransomNote, string magazine) {
if (ransomNote.size() > magazine.size()) {
return false;
}
vector<int> cnt(26);
for (auto & c : magazine) {
cnt[c - 'a']++;
}
for (auto & c : ransomNote) {
cnt[c - 'a']--;
if (cnt[c - 'a'] < 0) {
return false;
}
}
return true;
}
};
作者:力扣官方题解
链接:https://leetcode.cn/problems/ransom-note/solutions/1135839/shu-jin-xin-by-leetcode-solution-ji8a/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
- 2
- 0
-
赞助
AliPayWeChat Pay -
分享