383. 赎金信
力扣链接
给你两个字符串: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
提示:
1 <= ransomNote.length, magazine.length <= 105
ransomNote 和 magazine 由小写英文字母组成
思路
暴力
两个for循环暴力解决
哈希
题目分析
- 由小写英文字母组成
- magazine 中的每个字符只能在 ransomNote 中使用一次
程序流程 - 26位小写字母int set[26]
- magazine的字符存储,下标0为a,25为z。存储的值为次数
代码
cclass Solution {
public:
bool canConstruct(string ransomNote, string magazine) {
int set[26]={0};//记得初始化,不然后面小于0判断出问题
if(ransomNote.length()>magazine.length())
return false;
for(int i=0;i<magazine.length();i++)
set[magazine[i]-'a']++;
for(int j=0;j<ransomNote.length();j++)
set[ransomNote[j]-'a']--;
for(int i=0;i<26;i++)
{
if(set[i]<0)
return false;
}
return true;
}
};