#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; } } // namespace 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; }