g0901_1000.s0916_word_subsets.Solution Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of leetcode-in-java21 Show documentation
Show all versions of leetcode-in-java21 Show documentation
Java-based LeetCode algorithm problem solutions, regularly updated
package g0901_1000.s0916_word_subsets;
// #Medium #Array #String #Hash_Table #2022_03_29_Time_30_ms_(57.30%)_Space_88_MB_(54.80%)
import java.util.ArrayList;
import java.util.List;
/**
* 916 - Word Subsets\.
*
* Medium
*
* 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 <= 104
* * `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**.
**/
public class Solution {
public List wordSubsets(String[] words1, String[] words2) {
List l1 = new ArrayList<>();
int[] target = new int[26];
for (String s1 : words2) {
int[] temp = new int[26];
for (char ch1 : s1.toCharArray()) {
temp[ch1 - 'a']++;
target[ch1 - 'a'] = Math.max(target[ch1 - 'a'], temp[ch1 - 'a']);
}
}
for (String s1 : words1) {
int[] count = new int[26];
for (char ch1 : s1.toCharArray()) {
count[ch1 - 'a']++;
}
if (checkIt(target, count)) {
l1.add(s1);
}
}
return l1;
}
private boolean checkIt(int[] target, int[] count) {
for (int i = 0; i < 26; i++) {
if (count[i] < target[i]) {
return false;
}
}
return true;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy