---
# System prepended metadata

title: 916. Word Subsets
tags: [C++, LeetCode]

---

# LeetCode 916. Word Subsets

https://leetcode.com/problems/word-subsets/description/

## 題目大意

如題

## 思考

用 hashtable 的觀念即可

C++ 參考解答：

```cpp!
class Solution
{
public:
    vector<string> wordSubsets(vector<string> &words1, vector<string> &words2)
    {
        int cnt[26] = {0};

        for (const auto &b : words2)
        {
            int temp[26] = {0};
            for (char c : b)
            {
                ++temp[c - 'a'];
            }

            for (int i = 0; i < 26; ++i)
            {
                cnt[i] = max(cnt[i], temp[i]);
            }
        }

        vector<string> ans;
        ans.reserve(words1.size());

        for (const auto &a : words1)
        {
            int temp[26] = {0};
            for (char c : a)
            {
                ++temp[c - 'a'];
            }

            bool isUniversal = true;
            for (int i = 0; i < 26; ++i)
            {
                if (temp[i] < cnt[i])
                {
                    isUniversal = false;
                    break;
                }
            }

            if (isUniversal)
                ans.push_back(a);
        }

        return ans;
    }
};
```

Go 參考解答：

```go!
func wordSubsets(words1 []string, words2 []string) []string {
	cnt := make([]int, 26)

	for _, b := range words2 {
		temp := make([]int, 26)
		for _, c := range b {
			temp[c-'a']++
		}

		for i := 0; i < 26; i++ {
			if temp[i] > cnt[i] {
				cnt[i] = temp[i]
			}
		}
	}

	ans := make([]string, 0, len(words1))

	for _, a := range words1 {
		temp := make([]int, 26)
		for _, c := range a {
			temp[c-'a']++
		}

		isUniversal := true
		for i := 0; i < 26; i++ {
			if temp[i] < cnt[i] {
				isUniversal = false
				break
			}
		}

		if isUniversal {
			ans = append(ans, a)
		}
	}

	return ans
}
```