Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 8cabf9c

Browse files
Merge pull request #65 from amejiarosario/new-exercises
chore(lab): add new exercises and fix comment
2 parents c7e5c31 + 3f99c56 commit 8cabf9c

File tree

3 files changed

+103
-7
lines changed

3 files changed

+103
-7
lines changed
Lines changed: 54 additions & 0 deletions
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;
Lines changed: 47 additions & 0 deletions
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

Lines changed: 2 additions & 7 deletions
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)

AltStyle によって変換されたページ (->オリジナル) /