概述
分析
-
根据题目提示: 判断
ransomNote
能不能由magazine
里面的字符构成,并且magazine
中的每个字符只能在ransomNote
中使用一次所以我们需要统计
ransomNote
和magazine
中每个字符出现的次数,然后比较每个字符次数是否相同即可这里,每个字符只能使用一次的条件,是可以直接判断通过字符出现次数来判断的关键
-
统计每个字符的次数可以使用哈希表来
思路
哈希表是直接使用数组还是用map?
- 因为我们只需要统计小写字母的个数。一小写字母个数是有限的而且一个字符可以也可以转换为专用的整数,所以完全可以选择使用数组充当哈希表
代码
class Solution {
public:
bool canConstruct(string ransomNote, string magazine) {
int hash_table[30] = {0,};
for (auto c : ransomNote)
++hash_table[c - 'a'];
for (auto c : magazine)
--hash_table[c - 'a'];
for (int i = 0; i < 30; ++i)
if (hash_table[i] > 0) return false; // 判断是否都大于0,如果有小于0的说明magazine内某个字符不足以提供给ransomNote
return true;
}
};