#include #include #include namespace { std::map build_freqs(const std::string &input) { std::map freqs; for (auto c : input) { freqs[c]++; } return freqs; } bool subtract(std::map 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; }