1
-
2
1
# Solution 02
3
2
# O(b^2 + ns) time | O(b^2 + n) space
4
3
def multiStringSearch (bigString , smallStrings ):
5
4
modifiedSuffixTrie = ModifiedSuffixTrie (bigString )
6
5
return [modifiedSuffixTrie .conntains (string ) for string in smallStrings ]
7
6
8
-
9
7
class ModifiedSuffixTrie :
10
8
def __init__ (self , string ):
11
9
self .root = {}
12
10
self .populateModifiedSuffixTrieFrom (string )
13
11
14
-
15
12
def populateModifiedSuffixTrieFrom (self , string ):
16
13
for i in range (len (string )):
17
14
self .insertSubstringStartinngAt (i , string )
18
15
19
-
20
16
def insertSubstringStartinngAt (self , idx , string ):
21
17
node = self .root
22
18
for j in range (idx , len (string )):
@@ -25,7 +21,6 @@ def insertSubstringStartinngAt(self, idx, string):
25
21
node [letter ] = {}
26
22
node = node [letter ]
27
23
28
-
29
24
def conntains (self , string ):
30
25
node = self .root
31
26
for letter in string :
@@ -35,10 +30,6 @@ def conntains(self, string):
35
30
return True
36
31
37
32
38
-
39
-
40
-
41
-
42
33
# Solution 03
43
34
# O(bs + ns) time | O(ns) space
44
35
def multiStringSearch (bigString , smallStrings ):
@@ -50,7 +41,6 @@ def multiStringSearch(bigString, smallStrings):
50
41
findSmallStringsIn (bigString , i , trie , containedString )
51
42
return [string in containedString for string in smallStrings ]
52
43
53
-
54
44
def findSmallStringsIn (string , startIdx , trie , containedStringns ):
55
45
currentNode = trie .root
56
46
for i in range (startIdx , len (string )):
@@ -61,13 +51,11 @@ def findSmallStringsIn(string, startIdx, trie, containedStringns):
61
51
if trie .endSymbol in currentNode :
62
52
containedStringns [currentNode [trie .endSymbol ]] = True
63
53
64
-
65
54
class Trie :
66
55
def __init__ (self ):
67
56
self .root = {}
68
57
self .endSymbol = '*'
69
58
70
-
71
59
def insert (self , string ):
72
60
current = self .root
73
61
for i in range (len (string )):
0 commit comments