Design a HashSet without using any built-in hash table libraries.
Implement MyHashSet
class:
void add(key)
Inserts the valuekey
into the HashSet.bool contains(key)
Returns whether the valuekey
exists in the HashSet or not.void remove(key)
Removes the value key in the HashSet. Ifkey
does not exist in the HashSet, do nothing.
Example
Input
["MyHashSet", "add", "add", "contains", "contains", "add", "contains", "remove", "contains"]
[[], [1], [2], [1], [3], [2], [2], [2], [2]]
Output
[null, null, null, true, false, null, true, null, false]
Explanation
MyHashSet myHashSet = new MyHashSet();
myHashSet.add(1); // set = [1]
myHashSet.add(2); // set = [1, 2]
myHashSet.contains(1); // return True
myHashSet.contains(3); // return False, (not found)
myHashSet.add(2); // set = [1, 2]
myHashSet.contains(2); // return True
myHashSet.remove(2); // set = [1]
myHashSet.contains(2); // return False, (already removed)
Solution
var MyHashSet = function () {};
/**
* @param {number} key
* @return {void}
*/
MyHashSet.prototype.add = function (key) {
this[key] = null;
};
/**
* @param {number} key
* @return {void}
*/
MyHashSet.prototype.remove = function (key) {
delete this[key];
};
/**
* @param {number} key
* @return {boolean}
*/
MyHashSet.prototype.contains = function (key) {
return this.hasOwnProperty(key);
};
/**
* Your MyHashSet object will be instantiated and called as such:
* var obj = new MyHashSet()
* obj.add(key)
* obj.remove(key)
* var param_3 = obj.contains(key)
*/