Skip to content

Instantly share code, notes, and snippets.

@igavrysh
Created January 10, 2025 05:55
Show Gist options
  • Save igavrysh/f0588aca3c196bc0b378bcadc61aee42 to your computer and use it in GitHub Desktop.
Save igavrysh/f0588aca3c196bc0b378bcadc61aee42 to your computer and use it in GitHub Desktop.
916. Word Subsets
/*
916. Word Subsets
Medium
Companies
You are given two string arrays words1 and words2.
A string b is a subset of string a if every letter in b occurs in a including multiplicity.
For example, "wrr" is a subset of "warrior" but is not a subset of "world".
A string a from words1 is universal if for every string b in words2, b is a subset of a.
Return an array of all the universal strings in words1. You may return the answer in any order.
Example 1:
Input: words1 = ["amazon","apple","facebook","google","leetcode"], words2 = ["e","o"]
Output: ["facebook","google","leetcode"]
Example 2:
Input: words1 = ["amazon","apple","facebook","google","leetcode"], words2 = ["l","e"]
Output: ["apple","google","leetcode"]
Constraints:
* 1 <= words1.length, words2.length <= 10^4
* 1 <= words1[i].length, words2[i].length <= 10
* words1[i] and words2[i] consist only of lowercase English letters.
* All the strings of words1 are unique.
*/
class Solution {
public List<String> wordSubsets(String[] words1, String[] words2) {
int[] fq = new int[26];
for (String w : words2) {
int[] curr_fq = fq(w);
for (int i = 0; i < 26; i++) {
fq[i] = Math.max(fq[i], curr_fq[i]);
}
}
List<String> result = new LinkedList<>();
for (String w : words1) {
int[] curr_fq = fq(w);
boolean to_add = true;
for (int i = 0; i < 26; i++) {
if (fq[i] > 0 && curr_fq[i] < fq[i]) {
to_add = false;
}
}
if (to_add) {
result.add(w);
}
}
return result;
}
private int[] fq(String s) {
int[] fq = new int[26];
for (int i = 0; i < s.length(); i++) {
fq[s.charAt(i)-'a']++;
}
return fq;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment