Let's define a function f(s)
over a non-empty string s
, which calculates the frequency of the smallest character in s
. For example, if s = "dcce"
then f(s) = 2
because the smallest character is "c"
and its frequency is 2.
Now, given string arrays queries
and words
, return an integer array answer
, where each answer[i]
is the number of words such that f(queries[i])
< f(W)
, where W
is a word in words
.
Example 1:
Input: queries = ["cbd"], words = ["zaaaz"] Output: [1] Explanation: On the first query we have f("cbd") = 1, f("zaaaz") = 3 so f("cbd") < f("zaaaz").
class Solution { public int[] numSmallerByFrequency(String[] queries, String[] words) { int qNum = queries.length; int wNum = words.length; int[] qArr = new int[qNum]; int[] wArr = new int[wNum]; for (int i = 0; i < qArr.length; i++) { qArr[i] = getSmallFreq(queries[i]); } for (int i = 0; i < wArr.length; i++) { wArr[i] = getSmallFreq(words[i]); } int[] res = new int[qNum]; for (int i = 0; i < qNum; i++) { int tmp = 0; for (int wFreq: wArr) { if (qArr[i] < wFreq) { tmp += 1; } } res[i] = tmp; } return res; } private int getSmallFreq(String s) { int[] freqArr = new int[26]; for (char c: s.toCharArray()) { freqArr[c - 'a'] += 1; } for (int i = 0; i < freqArr.length; i++) { if (freqArr[i] > 0) { return freqArr[i]; } } return 0; } }