java: add «916. Word Subsets»

URL:	https://leetcode.com/problems/word-subsets/
Signed-off-by: Matej Focko <me@mfocko.xyz>
This commit is contained in:
Matej Focko 2025-01-11 00:06:06 +01:00
parent 07f0ad8512
commit 6713133429
Signed by: mfocko
SSH key fingerprint: SHA256:icm0fIOSJUpy5+1x23sfr+hLtF9UhY8VpMC7H4WFJP8

View file

@ -9,14 +9,18 @@ class Solution {
return freqs;
}
private static boolean isUniversal(int[][] freqs2, String w) {
private static void merge(int[] cum, int[] freqs) {
for (var i = 0; i < 26; ++i) {
cum[i] = Math.max(cum[i], freqs[i]);
}
}
private static boolean isUniversal(int[] freqs2, String w) {
var freqs = getFreqs(w);
for (var f : freqs2) {
for (var i = 0; i < 26; ++i) {
if (f[i] > freqs[i]) {
return false;
}
for (var i = 0; i < 26; ++i) {
if (freqs2[i] > freqs[i]) {
return false;
}
}
@ -24,11 +28,12 @@ class Solution {
}
public List<String> wordSubsets(String[] words1, String[] words2) {
var freqs2 = new int[words2.length][];
var cumulativeFreqs = new int[26];
for (var i = 0; i < words2.length; ++i) {
freqs2[i] = getFreqs(words2[i]);
var freqs = getFreqs(words2[i]);
merge(cumulativeFreqs, freqs);
}
return Arrays.stream(words1).filter(w -> isUniversal(freqs2, w)).toList();
return Arrays.stream(words1).filter(w -> isUniversal(cumulativeFreqs, w)).toList();
}
}