思路:这道题是一个更为典型的哈希法,就是判断一个单词里的字母是不是在另外一个单词里面出现过。鉴于字母的个数有限,只有26个字母。我们采用数组作为我们的哈希表 。我们初始化我们的hash[26]={0};用单词一来对哈希表初始化,hash[s1[i]-'a']++;用单词二来检验哈希表,在本题当中需要注意,单词一和单词二中都出现过的字母才会在单词二的过程中检验哈希表,也就是hash[s2[i]-'a']--;但是只出现过在单词二的单词就不用检验哈希表了。这点考虑到之后就没有问题了。
class Solution {
public:
bool canConstruct(string ransomNote, string magazine) {
int i,j,k;
int hash[26]={0};
for(i=0;i<ransomNote.size();i++)
{
hash[ransomNote[i]-'a']++;
}
for(i=0;i<magazine.size();i++)
{
if(hash[magazine[i]-'a']!=0)
hash[magazine[i]-'a']--;
}
for(i=0;i<26&&hash[i]==0;i++);
if(i==26)return true;
else return false;
}
};