Created
January 10, 2025 05:55
-
-
Save igavrysh/f0588aca3c196bc0b378bcadc61aee42 to your computer and use it in GitHub Desktop.
916. Word Subsets
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
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