题目大意:勒索信(嗯,你没看错,勒索信,有没有吓哭)
给一串任意的勒索信字符串和另一串字符串包含从杂志上剪下来的字母,要求你写一个函数来返回是否勒索信是否由该杂志中字母组成,不是的话返回失败。
每一个杂志中的字母在你的勒索信中只能用一次。
注:你可以假设字符串都只包含小写字母。
背景介绍(作者瞎说的):大概因为美国绑匪勒索信都是从杂志上剪字母下来拼接而成(手写勒索信的话,可能被认出笔记).......
思路分析:就是看字符串1的所有字母是否都在字符串2中。分析:因为题目只要求小写字母,于是......直接用两个大写为26(个小写字母)的数组记录两个字符串即可,看字符串1是否全都包含在字符串2中,即数组1是否每个元素都小于等于数组2。复杂度O(n),C++代码如下(可AC):
class Solution {
public:
bool canConstruct(string ransomNote, string magazine) {
int r[26]={0}, m[26]={0};
for(int i=0;i<ransomNote.size();i++)
r[ransomNote[i]-'a']++;
for(int i=0;i<magazine.size();i++)
m[magazine[i]-'a']++;
for(int i=0;i<26;i++)
if(m[i]-r[i]<0)
return false;
return true;
}
};