Chan Park
3 min readJan 22, 2021

--

Leecode 1170 Compare Strings by Frequency of the Smallest Character.

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”). Example 2:

Input: queries = [“bbb”,”cc”], words = [“a”,”aa”,”aaa”,”aaaa”] Output: [1,2] Explanation: On the first query only f(“bbb”) < f(“aaaa”). On the second query both f(“aaa”) and f(“aaaa”) are both > f(“cc”).

Constraints:

1 <= queries.length <= 2000 1 <= words.length <= 2000 1 <= queries[i].length, words[i].length <= 10 queries[i][j], words[i][j] are English lowercase letters.

//Java
import java.util.*;

class SmallerFrequency {
public static void main(String[] args) {
Solution sl = new Solution();
System.out.println(Arrays.toString(sl.numSmallerByFrequency(new String[] { "cbd" }, new String[] { "zaaaz" })));
System.out.println(Arrays.toString(
sl.numSmallerByFrequency(new String[] { "bbb", "cc" }, new String[] { "a", "aa", "aaa", "aaaa" })));
}
}

class Solution {
public int[] numSmallerByFrequency(String[] queries, String[] words) {

int[] result = new int[queries.length];


int[] query = new int[queries.length];
int[] word = new int[words.length];

for (int i = 0; i < queries.length; i++) {
query[i] = getMinQuery(queries[i]);
}

// System.out.println(Arrays.toString(qr));

for (int i = 0; i < words.length; i++) {
word[i] = getMinQuery(words[i]);
}

// System.out.println(Arrays.toString(wor));

for (int i = 0; i < query.length; i++) {

int count = 0;
for (int j = 0; j < word.length; j++) {

if (query[i] < word[j]) {
count++;
}
}

result[i] = count;
}

return result;

}

public int getMinQuery(String s) {

char[] charAr = s.toCharArray();
Arrays.sort(charAr);

int minLenQuery = 1;

for (int i = 1; i < charAr.length; i++) {
if (charAr[0] == charAr[i]) {
minLenQuery++;
}

}
return minLenQuery;
}
}
//Javascript
var numSmallerByFrequency = function(queries, words) {

let ans = [];

let qr = [];
let wor = [];


for (let i = 0; i < queries.length; i++) {
qr[i] = getMinQuery(queries[i]);
}

for (let i = 0; i < words.length; i++) {
wor[i] = getMinQuery(words[i]);
}

for (let i = 0; i < qr.length; i++) {

let count = 0;
for (let j = 0; j < wor.length; j++) {

if (qr[i] < wor[j]) {
count++;
}
}

ans[i] = count;
}

return ans;
};

var getMinQuery = function(s) {

let charAr = [...s];
charAr.sort();

let minLenQuery = 1;

for (var i = 1; i < charAr.length; i++) {
if (charAr[0] == charAr[i]) {
minLenQuery++;
}

}
return minLenQuery;
}

console.log(numSmallerByFrequency(["cbd"],["zaaaz"]));
console.log(numSmallerByFrequency(["bbb","cc"],["a","aa","aaa","aaaa"]));
//C#
public class Solution
{
public int[] NumSmallerByFrequency(string[] queries, string[] words)
{
int[] result = new int[queries.Length];


int[] query = new int[queries.Length];
int[] word = new int[words.Length];

for (int i = 0; i < queries.Length; i++)
{
query[i] = getMinQuery(queries[i]);
}


for (int i = 0; i < words.Length; i++)
{
word[i] = getMinQuery(words[i]);
}


for (int i = 0; i < query.Length; i++)
{

int count = 0;
for (int j = 0; j < word.Length; j++)
{

if (query[i] < word[j])
{
count++;
}
}

result[i] = count;
}

return result;
}

public int getMinQuery(String s)
{

char[] charAr = s.ToCharArray(0, s.Length);
Array.Sort(charAr);

int minLenQuery = 1;

for (int i = 1; i < charAr.Length; i++)
{
if (charAr[0] == charAr[i])
{
minLenQuery++;
}

}
return minLenQuery;
}
}

--

--