题目大意:给定两个字符串(均为小写字母),判断第一个字符串是否可以用第二个字符串中的字母构成,每个字母只能用一次。
思路:
统计两个字符串中各个字母的数量,如果第一个字符串中每个字母的数量都小于等于第二个字符串中对应字母数量,则返回true,否则返回false。
为了节约空间和遍历次数,我们可以先统计第二个字符串中各个字母的数量,然后遍历第一个字符串,将刚才统计的每个字母的数量的数组对应第一个字符串相应字母数量减一,如果遍历过程中有出现负数,则说明第一个字符串中有比第二个字符串数量多的字母,返回false,如果遍历完都不存在负数,则返回true。
bool canConstruct(char* ransomNote, char* magazine) {
int mag[26];
memset(mag,0,sizeof(int)*26);
for(int i=0;magazine[i]!='\0';i++)
{
mag[magazine[i]-'a']++;
}
for(int i=0;ransomNote[i]!='\0';i++)
{
mag[ransomNote[i]-'a']--;
if(mag[ransomNote[i]-'a']<0)
{
return false;
}
}
return true;
}