问题描述:
Given an arbitrary ransom note string and another string containing letters from all the magazines, write a function that will return true if the ransom note can be constructed from the magazines ; otherwise, it will return false.
Each letter in the magazine string can only be used once in your ransom note.
Note:
You may assume that both strings contain only lowercase letters.
canConstruct("a", "b") -> false canConstruct("aa", "ab") -> false canConstruct("aa", "aab") -> true
分析:大意就是给两个字符串,判断第一个字符串能否由第二个字串中字母组成,第二个字符串中的每个字符只能使用1次
个人用的hash表解决,0-256的值可以表示所有的字符了,所以哈希表大小定义为256.
字符为key,每个字符出现的次数为value
建立2个哈希表hash1、hash2,分别统计每个字符串出现的次数
最后比较hash1、hash2.
AC代码如下:
bool canConstruct(string ransomNote, string magazine)
{
if(ransomNote.length() > magazine.length())
return false;
int hash1[256] = {0};
int hash2[256] = {0};
for(int i = 0;i<ransomNote.size();i++)
hash1[ransomNote[i]]++;
for(int i = 0;i<magazine.size();i++)
hash2[magazine[i]]++;
for(int i =0;i<256;i++)
{
if(hash1[i] > hash2[i])
return false;
}
return true;
}