Come from : [https://leetcode-cn.com/problems/ransom-note/]
383. Ransom Note
1.Question
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.
Each letter in the magazine string can only be used once in your ransom note.
Note :
You may assume that both strings contain only lowercase letters.
canConstruct("a", "b") -> false
canConstruct("aa", "ab") -> false
canConstruct("aa", "aab") -> true
2.Answer
easy 类型题目。
我的解题思路:
- 首先统计 赎金信 (ransom) 中 每个字母 出现的 次数。记录在 ranTemp 中。
- 接着统计 杂志(magazine) 中 每个字母出现的次数。记录在 magTemp 中。
- 接着 逐个比较 赎金信 中 每个字母出现的次数 是否都 小于等于 和 杂志 中每个字母出现的次数。如果 全都 小于等于,则返回 true ,反之返回 false。
AC代码如下:
class Solution {
public:
bool canConstruct(string ransomNote, string magazine) {
int ranTemp[26] = {0};
int magTemp[26] = {0};
for(int i = 0; i < ransomNote.size(); ++i)
{
++ranTemp[ransomNote[i] - 'a'];
}
for(int i = 0; i < magazine.size(); ++i)
{
++magTemp[magazine[i] - 'a'];
}
for(int i = 0; i < 26; ++i)
{
if(ranTemp[i] > magTemp[i])
{
return false;
}
}
return true;
}
};
3.大神们的解决方案
速度最快的解法就是我的解法,哈哈哈,就似这么拽。。。。
感觉用 哈希表 也可以。我就不在这 实现了。
4.我的收获
Fighting~~~
2019/5/18 胡云层 于南京 81