General rule:
Time complexity = Number of states * Number of transitions of one state * Time complexity of transition function
Examples:
Time complexity = Number of states * Number of transitions of one state * Time complexity of transition function
class Solution {
public int[] numSmallerByFrequency(String[] queries, String[] words) {
int[] sorted = new int[words.length];
for (int i = 0; i < words.length; i++) {
sorted[i] = calculate(words[i]);
}
Arrays.sort(sorted);
int[] nums = new int[queries.length];
for (int i = 0; i < queries.length; i++) {
int target = calculate(queries[i]);
int lower = 0;
int upper = words.length;
while (lower < upper) {
int mid = lower + (upper - lower) / 2;
if (sorted[mid] <= target) {
lower = mid + 1;
} else {
upper = mid;
}
}
nums[i] = words.length - lower;
}
return nums;
}
private int calculate(String word) {
int[] counting = new int[26];
for (char c : word.toCharArray()) {
counting[c - 'a']++;
}
for (int i = 0; i < 26; i++) {
if (counting[i] > 0) {
return counting[i];
}
}
return 0;
}
}