LeetCode 383. Ransom Note 题解(C++)
题目描述
- 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.
示例
You may assume that both strings contain only lowercase letters.
canConstruct(“a”, “b”) -> false
canConstruct(“aa”, “ab”) -> false
canConstruct(“aa”, “aab”) -> true.
思路
- 首先创建一个长度为26的整数数组用于存储26个字母出现的次数;
- 之后对magazine数组进行遍历,记录每个字符出现的次数,若某字符出现,只需使该相应的数组位置的内容自加1;
- 再对ransomNote数组进行遍历,若某字符出现,使该对应的数组位置的内容自减1,若自减1后的结果小于0,则表示该字符在magazine中出现的次数比在ransomNote中出现的次数少,即返回false;
- 循环完毕返回true。
代码
class Solution
{
public:
bool canConstruct(string ransomNote, string magazine)
{
int cNum[26] = {0};
for (int i = 0; i < magazine.length(); ++i)
{
cNum[magazine[i] - 'a']++;
}
for (int i = 0; i < ransomNote.length(); ++i)
{
cNum[ransomNote[i] - 'a']--;
if (cNum[ransomNote[i] - 'a'] < 0)
{
return false;
}
}
return true;
}
};