916. Word Subsets

Difficulty:
Related Topics:
Similar Questions:

    Problem

    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.

    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:

    Solution (Java)

    class Solution {
        public List<String> wordSubsets(String[] words1, String[] words2) {
            List<String> 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;
        }
    }
    

    Explain:

    nope.

    Complexity: