题目:给你两个字符串:ransomNote 和 magazine ,判断 ransomNote 能不能由 magazine 里面的字符构成。 如果可以,返回 true ;否则返回 false 。 magazine 中的每个字符只能在 ransomNote 中使用一次。
示例 1: 输入:ransomNote = “a”, magazine = “b” 输出:false
示例 2: 输入:ransomNote = “aa”, magazine = “ab” 输出:false
示例 3: 输入:ransomNote = “aa”, magazine = “aab” 输出:true
思路:本题中所有字母都是小写字母,可以直接使用数组,定义一个大小为26的数组,存储杂志数组里每一个字母出现的次数。然后遍历赎金信数组,减去对应的字母出现次数,若是出现小于0的值,说明不符合,返回false。
代码:
class Solution { //赎金信
public:
bool canConstruct(string ransomNote, string magazine) {
int umap[26] = { 0 };
for (char i : magazine) {
umap[i - 'a']++;
}
for (char i : ransomNote) {
umap[i - 'a']--;
if (umap[i - 'a'] < 0) {
return false;
}
}
return true;
}
};
int main()
{
string ransomNote = "aa";
string magazine = "ab";
Solution solution;
solution.canConstruct(ransomNote, magazine);
return 0;
}