题目描述:
给定一个赎金信 (ransom) 字符串和一个杂志(magazine)字符串,判断第一个字符串ransom能不能由第二个字符串magazines里面的字符构成。如果可以构成,返回 true ;否则返回 false。
(题目说明:为了不暴露赎金信字迹,要从杂志上搜索各个需要的字母,组成单词来表达意思。)
注意:
你可以假设两个字符串均只含有小写字母。

输入示例;
canConstruct("a", "b") -> false
canConstruct("aa", "ab") -> false
canConstruct("aa", "aab") -> true

算法思想:哈希表。定义一个哈希数组,用来记录magazine字符串中出现过的字符的次数,然后在遍历ransom字符串,去哈希数组中查找对应字符,数量不为零,则–,当所要查找的字符在哈希数组中的数量为0时,则返回false,表示不可组成。

class Solution {
public:
bool canConstruct(string ransomNote, string magazine) {
int hashTable[26];
fill(hashTable,hashTable+26,0);
for(int i=0;i<magazine.size();i++){
int num=magazine[i]-'a';
hashTable[num]+=1;
}
for(int i=0;i<ransomNote.size();i++){
if(hashTable[ransomNote[i]-'a']==0)
return false;
else
hashTable[ransomNote[i]-'a']--;
}
return true;
}
};

LeetCode_383_赎金信_数组