383. 赎金信
这道题和242. 有效的字母异位词类似,很简单。
自己写的:
class Solution {
public:
bool canConstruct(string ransomNote, string magazine) {
int hash[26] = {0};
for (auto c : magazine)
hash[c - 'a'] += 1;
for (auto c : ransomNote)
{
if (hash[c - 'a'] <= 0)
return false;
--hash[c - 'a'];
}
return true;
}
};
然后看了卡哥思路,和我的差不多,不过感觉代码有些地方更优。
卡哥代码:
class Solution {
public:
bool canConstruct(string ransomNote, string magazine) {
int record[26] = {0};
//add
if (ransomNote.size() > magazine.size()) {
return false;
}
for (int i = 0; i < magazine.length(); i++) {
// 通过record数据记录 magazine里各个字符出现次数
record[magazine[i]-'a'] ++;
}
for (int j = 0; j < ransomNote.length(); j++) {
// 遍历ransomNote,在record里对应的字符个数做--操作
record[ransomNote[j]-'a']--;
// 如果小于零说明ransomNote里出现的字符,magazine没有
if(record[ransomNote[j]-'a'] < 0) {
return false;
}
}
return true;
}
};
主要是这段代码
if (ransomNote.size() > magazine.size()) {
return false;
}
事先做了个长度的判断,很科学。

浙公网安备 33010602011771号