LeetCode/cpp/ransom-note.cpp

54 lines
929 B
C++
Raw Normal View History

#include <cassert>
#include <map>
#include <string>
namespace {
std::map<char, int> build_freqs(const std::string& input)
{
std::map<char, int> freqs;
for (auto c : input) {
freqs[c]++;
}
return freqs;
}
bool subtract(std::map<char, int> available, const std::string& message)
{
for (auto c : message) {
available[c]--;
if (available[c] < 0) {
return false;
}
}
return true;
}
}
class Solution {
public:
bool canConstruct(const std::string& ransomNote, const std::string& magazine)
{
auto available = build_freqs(magazine);
return subtract(available, ransomNote);
}
};
int main()
{
Solution s;
assert(!s.canConstruct("a", "b"));
assert(!s.canConstruct("aa", "ab"));
assert(s.canConstruct("aa", "aab"));
assert(s.canConstruct("ab", "aab"));
assert(s.canConstruct("ba", "aab"));
return 0;
}