给你两个字符串:ransomNote 和 magazine ,判断 ransomNote 能不能由 magazine 里面的字符构成。如果可以,返回 true ;否则返回 false 。magazine 中的每个字符只能在ransomNote 中使用一次。
bool canConstruct(char * ransomNote, char * magazine){
int a=strlen(ransomNote);
int b=strlen(magazine);
int cnt[27]={0},hak[27]={0};
if(a>b){
return false;
}
for(int i=0;i<a;i++){
cnt[ransomNote[i]-'a']++;
}
for(int j=0;j<b;j++){
hak[magazine[j]-'a']++;
}
for(int k=0;k<27;k++){
if(cnt[k]){
if(cnt[k]>hak[k]){
return false;
}
}
}
return true;
}
ASCLL码中,小写字母'a'是97,可以在randsom中,对所有元素进行遍历,其中每个元素-'a',即可得到每个元素所一一对应的下标,这个下标可以创建一个数组进行表示,再对数组进行计数,此为randsom中的同一种字符的个数,然后比较randsom和magazine中的元素数量进行比较,由于我们所创建的数组下标即代表字母,用一个判断就能解决元素数量(只要magazine是少于randsom中的元素就返回false)