Skip to content

Commit 3f99c56

Browse files
committed
chore(lab): add new exercises and fix comment:wq
1 parent c7e5c31 commit 3f99c56

File tree

3 files changed

+103
-7
lines changed

3 files changed

+103
-7
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
/**
2+
* Your WordDictionary object will be instantiated and called as such:
3+
* var obj = new WordDictionary()
4+
* obj.addWord(word)
5+
* var param_2 = obj.search(word)
6+
*/
7+
class WordDictionary {
8+
children = {};
9+
isWord = false;
10+
/**
11+
* Initialize your data structure here.
12+
*/
13+
constructor() {
14+
}
15+
16+
/**
17+
* Adds a word into the data structure.
18+
* @param {string} word
19+
* @return {void}
20+
*/
21+
addWord (word) {
22+
let curr = this;
23+
24+
for (let char of word) {
25+
if (!curr.children[char]) curr.children[char] = new WordDictionary();
26+
curr = curr.children[char];
27+
}
28+
29+
curr.isWord = true;
30+
}
31+
32+
/**
33+
* Returns if the word is in the data structure.
34+
* A word could contain the dot character '.' to represent any one letter.
35+
* @param {string} word
36+
* @return {boolean}
37+
*/
38+
search (word, curr = this, index = 0) {
39+
if (index > word.length) return true; // e.g. final '.'
40+
for (let [i, char] of [...word.slice(index)].entries()) {
41+
if (char === '.') {
42+
for (let child of Object.keys(curr.children)) {
43+
if (this.search(word, curr.children[child], i + 1)) return true;
44+
}
45+
}
46+
else if (!curr || !curr.children[char]) return false;
47+
curr = curr.children[char];
48+
}
49+
50+
return curr.isWord;
51+
}
52+
}
53+
54+
module.exports = WordDictionary;
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
const WordDictionary = require('./trie-wildcard-search');
2+
3+
describe('WordDictionary', () => {
4+
let wd;
5+
6+
beforeEach(() => {
7+
wd = new WordDictionary();
8+
});
9+
10+
describe('should find exact matches', () => {
11+
beforeEach(() => {
12+
wd.addWord('bad');
13+
wd.addWord('mad');
14+
});
15+
16+
it('should find match', () => {
17+
expect(wd.search('bad')).toEqual(true);
18+
expect(wd.search('mad')).toEqual(true);
19+
});
20+
21+
it('should be false for partial match', () => {
22+
expect(wd.search('ba')).toEqual(false);
23+
});
24+
25+
it('should be false for NO match', () => {
26+
expect(wd.search('dad')).toEqual(false);
27+
});
28+
});
29+
30+
describe('should find wildcard matches', () => {
31+
beforeEach(() => {
32+
wd.addWord('bad');
33+
});
34+
35+
it('should work with 1 wildcard', () => {
36+
expect(wd.search('.ad')).toEqual(true);
37+
});
38+
39+
it('should work with 1 wildcard not match', () => {
40+
expect(wd.search('.ax')).toEqual(false);
41+
});
42+
43+
it('should work with 2 wildcard', () => {
44+
expect(wd.search('..d')).toEqual(true);
45+
});
46+
});
47+
});

src/data-structures/graphs/graph.js

+2-7
Original file line numberDiff line numberDiff line change
@@ -250,12 +250,7 @@ class Graph {
250250
}
251251
}
252252

253-
Graph.UNDIRECTED = Symbol('undirected graph'); // one-way edges
254-
Graph.DIRECTED = Symbol('directed graph'); // two-ways edges
253+
Graph.UNDIRECTED = Symbol('directed graph'); // two-ways edges
254+
Graph.DIRECTED = Symbol('undirected graph'); // one-way edges
255255

256256
module.exports = Graph;
257-
258-
/*
259-
* https://repl.it/@amejiarosario/graphpy
260-
* http://www.pythontutor.com/visualize.html#mode=edit - https://goo.gl/Xp7Zpm
261-
*/

0 commit comments

Comments
 (0)