33 lines
905 B
C++
33 lines
905 B
C++
class Solution {
|
|
bool matches(const string &s, const string &word) const {
|
|
auto s_i = 0;
|
|
|
|
for (auto i = 0; s_i < s.size() && i < word.size(); i++) {
|
|
if (s[s_i] == word[i]) {
|
|
s_i++;
|
|
}
|
|
}
|
|
|
|
return s_i == s.size();
|
|
}
|
|
|
|
map<string, int> preprocess(const vector<string> &words) const {
|
|
map<string, int> histogram;
|
|
|
|
for (auto &w : words) {
|
|
histogram[w]++;
|
|
}
|
|
|
|
return histogram;
|
|
}
|
|
|
|
public:
|
|
int numMatchingSubseq(string s, vector<string> &words) {
|
|
auto histogram = preprocess(words);
|
|
return accumulate(histogram.begin(), histogram.end(), 0,
|
|
[&](int acc, const auto &pair) {
|
|
return acc +
|
|
(matches(pair.first, s) ? pair.second : 0);
|
|
});
|
|
}
|
|
};
|