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给定两个字符串,如果后一个字符串包含了前一个字符串所有出现的字母,返回真,否则返回假。
第二个字符串中的字母一个只能使用一次。(即如果前面出现了两个‘a',那么后面的字符串也要出现两次或两次以上的'a',否则算错)
注意:
你可以假定两个字符串里都只有小写字母。
canConstruct("a", "b") -> false canConstruct("aa", "ab") -> false canConstruct("aa", "aab") -> true
考研党诈尸啦
这道题没啥难的,我自己用了一个26元素的int数组,统计一下各字母出现的次数就完了。。。
class Solution {
public:
bool canConstruct(string ransomNote, string magazine) {
int temp[26];
for(int i=0;i<26;i++)
temp[i]=0;
int mlen=magazine.length();
for(int i=0;i<mlen;i++)
temp[magazine[i]-'a']++;
int rlen=ransomNote.length();
for(int i=0;i<rlen;i++){
int num=ransomNote[i]-'a';
if(temp[num]==0) return false;
temp[num]--;
}
return true;
}
};