less than 1 minute read

<-E 1170> Compare Strings by Frequency of the Smallest Character

class Solution {
public:
    vector<int> numSmallerByFrequency(const vector<string>& queries, 
                                    const vector<string>& words) {
    if (queries.empty() || words.empty()) {
      return {};
    }
    vector<int> vqf(queries.size());
    for (size_t i = 0; i < queries.size(); ++i) {
      vqf[i] = frequency(queries[i]);
    }
    vector<int> vwf(words.size());
    for (size_t i = 0; i < words.size(); ++i) {
      vwf[i] = frequency(words[i]);
    }
    sort(vwf.begin(), vwf.end());
    vector<int> res(queries.size());
    for (size_t i = 0; i < queries.size(); ++i) {
      auto it = upper_bound(vwf.begin(), vwf.end(), vqf[i]);
      res[i] = distance(it, vwf.end());
    }
    return res;
  }

private:
  int frequency(const string& s) {
    if (s.empty()) {
      return 0;
    }
    return count(s.begin(), s.end(), *min_element(s.begin(), s.end()));
  }
};