383赎金信
还是用哈希表来存对应字母的出现个数,先遍历一遍magazine,记录总共有多少,再遍历ransom,对应相减,如果不够扣就返回false
时间复杂度O(N),空间复杂度O(1),因为最多只有26个小写字母
class Solution {
public:
bool canConstruct(string ransomNote, string magazine) {
vector<int> count(27);
for(char c: magazine){
count[c - 'a'] ++;
}
for(char c: ransomNote){
count[c - 'a'] --;
if(count[c - 'a'] < 0) return false;
}
return true;
}
};
242有效的字母异同词
字母异同词就是两个字符串的字母出现的次数完全一样,还是和上面一模一样的做法,构建哈希表,直接记录次数,分别遍历两个字符串,一个记录,一个用来减去。时间和空间复杂度也和上面的一样
class Solution {
public:
bool isAnagram(string s, string t) {
vector<int> count(27,0);
if(s.length() != t.length()) return false;
for(char c : s){
count[c - 'a'] ++;
}
for(char c : t){
count[c - 'a'] --;
if(count[c - 'a'] < 0) return false;
}
return true;
}
};