1
0
Fork 0
mirror of https://gitlab.com/mfocko/LeetCode.git synced 2024-09-19 17:56:55 +02:00
LeetCode/problems/cpp/ransom-note.cpp
Matej Focko 333866d1bc
chore: split solutions by language
Signed-off-by: Matej Focko <mfocko@redhat.com>
2023-06-02 17:19:02 +02:00

53 lines
929 B
C++

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