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;
}
};
本文介绍了解决LeetCode383题的一种方法。通过使用一个大小为26的整数数组来记录magazine字符串中各字母的出现次数,然后遍历ransomNote字符串,检查是否能从magazine中构造出ransomNote。如果所有字母的数量都足够,则返回true,否则返回false。
&spm=1001.2101.3001.5002&articleId=52786849&d=1&t=3&u=a6a11df18edb48018a9a177ae0501c58)
480

被折叠的 条评论
为什么被折叠?



