一、思路
判断magazine中的字母能否组成ransomNote。
magazine中的字母可以比ransomNote多,所以我们对magazine中的字母简历哈希表
m
(
c
h
a
r
,
i
n
t
)
m(char,int)
m(char,int),然后ransomNote对
m
m
m查表,
m
m
m在相应位置减1,若果出现小于0的数,则不能构成。
PS:当ransomNote中出现了
m
m
m中不存在的值时,可以直接返回false。
二、代码
1.python
代码如下:
class Solution:
def canConstruct(self, ransomNote, magazine) :
dic = {}
for i in magazine:
dic[i] = dic.get(i,0) + 1
for j in ransomNote:
if j not in dic.keys():
return False
else:
dic[j] -= 1
for key,val in dic.items():
if val < 0:
return False
return True
2.C++
class Solution {
public:
bool canConstruct(string ransomNote, string magazine) {
map<char,int> m;
for(int i=0;i<magazine.size();i++){
m[magazine[i]]++;
}
for(int j=0;j<ransomNote.size();j++){
if(m.find(ransomNote[j]) == m.end()){
return false;
}
else{
m[ransomNote[j]]--;
}
}
for(auto it=m.begin();it != m.end(); it++){
if(it->second < 0){
return false;
}
}
return true;
}
};
这篇博客探讨了一种编程问题,即如何判断给定的两串字符(赎金信ransomNote和杂志magazine)中的字母是否能组成赎金信。博主通过创建哈希表来统计杂志中每个字符的出现次数,并遍历赎金信,逐个消耗杂志中的字符。如果赎金信中的字符在杂志中不存在或者数量不足,则无法构成,算法复杂度为O(n)。博客提供了Python和C++两种实现代码。
2403

被折叠的 条评论
为什么被折叠?



