diff --git a/Data Structures/isSubsetOf.js b/Data Structures/isSubsetOf.js new file mode 100644 index 0000000..1b598dc --- /dev/null +++ b/Data Structures/isSubsetOf.js @@ -0,0 +1,92 @@ +// https://www.freecodecamp.org/learn/coding-interview-prep/data-structures/perform-a-subset-check-on-two-sets-of-data + +class Set { + constructor() { + // This will hold the set + this.dictionary = {}; + this.length = 0; + } + // This method will check for the presence of an element and return true or false + has(element) { + return this.dictionary[element] !== undefined; + } + // This method will return all the values in the set + values() { + return Object.keys(this.dictionary); + } + // This method will add an element to the set + add(element) { + if (!this.has(element)) { + this.dictionary[element] = true; + this.length++; + return true; + } + + return false; + } + // This method will remove an element from a set + remove(element) { + if (this.has(element)) { + delete this.dictionary[element]; + this.length--; + return true; + } + + return false; + } + // This method will return the size of the set + size() { + return this.length; + } + // This is our union method + union(set) { + const newSet = new Set(); + this.values().forEach((value) => { + newSet.add(value); + }); + set.values().forEach((value) => { + newSet.add(value); + }); + + return newSet; + } + // This is our intersection method + intersection(set) { + const newSet = new Set(); + + let largeSet; + let smallSet; + if (this.dictionary.length > set.length) { + largeSet = this; + smallSet = set; + } else { + largeSet = set; + smallSet = this; + } + + smallSet.values().forEach((value) => { + if (largeSet.dictionary[value]) { + newSet.add(value); + } + }); + + return newSet; + } + + difference(set) { + const newSet = new Set(); + + this.values().forEach((value) => { + if (!set.dictionary[value]) { + newSet.add(value); + } + }); + + return newSet; + } + // Only change code below this line + isSubsetOf(otherSet) { + return this.values().every((item) => otherSet.has(item)); + } + // Only change code above this line +}