Skip to main content

916.js

/** ------------------------------------------------------------------------------
*
* 916. Word Subsets
* Topics: Array, Hash Table
* https://leetcode.com/problems/word-subsets/?envType=daily-question&envId=2025-01-10
*
------------------------------------------------------------------------------ */
/**
* @param {string[]} words1
* @param {string[]} words2
* @return {string[]}
*/
var wordSubsets = function (words1, words2) {
let ans = []
let newArr = new Array(words2.length)
let arr = new Array(26).fill(0)
for (let i = 0; i < words2.length; i++) {
let newArr = new Array(26).fill(0)
for (let j of words2[i]) {
newArr[j.charCodeAt(0) - 97]++
arr[j.charCodeAt(0) - 97] = Math.max(arr[j.charCodeAt(0) - 97], newArr[j.charCodeAt(0) - 97])
}
}
for (let i of words1) {
let narr = new Array(26).fill(0)
for (let j of i) {
narr[j.charCodeAt(0) - 97]++
}
let canTake = true
for (let i = 0; i < 26; i++) {
if (narr[i] < arr[i]) {
canTake = false
break
}
}
if (canTake) {
ans.push(i)
}
}
return ans
}

var wordSubsets = function (words1, words2) {
let getFreq = (word) => {
let currFreq = new Array(26).fill(0)
for (let letter of word) {
currFreq[letter.charCodeAt(0) - "a".charCodeAt(0)]++
}
return currFreq
}

let maxFreq = new Array(26).fill(0)
for (let word of words2) {
let wordFreq = getFreq(word)
for (let i = 0; i < 26; i++) {
maxFreq[i] = Math.max(wordFreq[i], maxFreq[i])
}
}
let isUniv = (word) => {
let wordFreq = getFreq(word)
for (let i = 0; i < 26; i++) {
if (wordFreq[i] < maxFreq[i]) {
return false
}
}
return true
}

return words1.filter(isUniv)
}

console.log(wordSubsets(["amazon", "apple", "facebook", "google", "leetcode"], ["lo", "eo"]))