File tree 3 files changed +103
-7
lines changed
src/data-structures/graphs
3 files changed +103
-7
lines changed Original file line number Diff line number Diff line change
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 number Diff line number Diff line change
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
+ } ) ;
Original file line number Diff line number Diff line change @@ -250,12 +250,7 @@ class Graph {
250
250
}
251
251
}
252
252
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
255
255
256
256
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
- */
You can’t perform that action at this time.
0 commit comments