916. Word Subsets

We are given two arrays `A` and `B` of words.  Each word is a string of lowercase letters.

Now, say that word `b` is a subset of word `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"`.

Now say a word `a` from `A` is universal if for every `b` in `B`, `b` is a subset of `a`

Return a list of all universal words in `A`.  You can return the words in any order.

Example 1:

```Input: A = ["amazon","apple","facebook","google","leetcode"], B = ["e","o"]
```

Example 2:

```Input: A = ["amazon","apple","facebook","google","leetcode"], B = ["l","e"]
```

Example 3:

```Input: A = ["amazon","apple","facebook","google","leetcode"], B = ["e","oo"]
```

Example 4:

```Input: A = ["amazon","apple","facebook","google","leetcode"], B = ["lo","eo"]
```

Example 5:

```Input: A = ["amazon","apple","facebook","google","leetcode"], B = ["ec","oc","ceo"]
```

Note:

1. `1 <= A.length, B.length <= 10000`
2. `1 <= A[i].length, B[i].length <= 10`
3. `A[i]` and `B[i]` consist only of lowercase letters.
4. All words in `A[i]` are unique: there isn't `i != j` with `A[i] == A[j]`.

916. Word Subsets
``````struct Solution;

impl Solution {
fn word_subsets(a: Vec<String>, b: Vec<String>) -> Vec<String> {
let mut max_count = [0; 26];
for s in b {
let mut count = [0; 26];
for b in s.bytes() {
count[(b - b'a') as usize] += 1;
}
for i in 0..26 {
max_count[i] = max_count[i].max(count[i]);
}
}

let mut res = vec![];
'a: for s in a {
let mut count = [0; 26];
for b in s.bytes() {
count[(b - b'a') as usize] += 1;
}
for i in 0..26 {
if count[i] < max_count[i] {
continue 'a;
};
}
res.push(s)
}

res
}
}

#[test]
fn test() {
let b = vec_string!["e", "o"];
assert_eq!(Solution::word_subsets(a, b), res);
let b = vec_string!["l", "e"];
let res = vec_string!["apple", "google", "leetcode"];
assert_eq!(Solution::word_subsets(a, b), res);