Skip to content

Commit 708c190

Browse files
committed
add pattern match
1 parent 2fac908 commit 708c190

File tree

4 files changed

+99
-8
lines changed

4 files changed

+99
-8
lines changed

array/garage.py

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -40,10 +40,10 @@ def garage(beg, end):
4040
if i == len(beg):
4141
i = 0
4242
return moves
43-
44-
45-
initial = [1,2,3,0,4]
46-
final = [0,3,2,1,4]
47-
print("initial:", initial)
48-
print("final:", final)
49-
print(garage(initial, final))
43+
44+
if __name__ == "__main__":
45+
initial = [1,2,3,0,4]
46+
final = [0,3,2,1,4]
47+
print("initial:", initial)
48+
print("final:", final)
49+
print(garage(initial, final))

backtrack/pattern_match.py

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
"""
2+
Given a pattern and a string str,
3+
find if str follows the same pattern.
4+
5+
Here follow means a full match, such that there is a bijection between
6+
a letter in pattern and a non-empty substring in str.
7+
8+
Examples:
9+
pattern = "abab", str = "redblueredblue" should return true.
10+
pattern = "aaaa", str = "asdasdasdasd" should return true.
11+
pattern = "aabb", str = "xyzabcxzyabc" should return false.
12+
Notes:
13+
You may assume both pattern and str contains only lowercase letters.
14+
"""
15+
16+
17+
def pattern_match(pattern, string):
18+
"""
19+
:type pattern: str
20+
:type string: str
21+
:rtype: bool
22+
"""
23+
return DFS(pattern, string, {})
24+
25+
26+
def DFS(pattern, string, dic):
27+
print(dic)
28+
if len(pattern) == 0 and len(string) > 0:
29+
return False
30+
if len(pattern) == len(string) == 0:
31+
return True
32+
for end in range(1, len(string)-len(pattern)+2):
33+
if pattern[0] not in dic and string[:end] not in dic.values():
34+
dic[pattern[0]] = string[:end]
35+
if DFS(pattern[1:], string[end:], dic):
36+
return True
37+
del dic[pattern[0]]
38+
elif pattern[0] in dic and dic[pattern[0]] == string[:end]:
39+
if DFS(pattern[1:], string[end:], dic):
40+
return True
41+
return False
42+
43+
if __name__ == "__main__":
44+
pattern1 = "abab"
45+
string1 = "redblueredblue"
46+
pattern2 = "aaaa"
47+
string2 = "asdasdasdasd"
48+
pattern3 = "aabb"
49+
string3 = "xyzabcxzyabc"
50+
print(pattern_match(pattern1, string1))
51+
print(pattern_match(pattern2, string2))
52+
print(pattern_match(pattern3, string3))

graph/find_path.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,6 @@ def find_all_path(graph, start, end, path=[]):
3434
paths.append(newpath)
3535
return paths
3636

37-
3837
def find_shortest_path(graph, start, end, path=[]):
3938
path = path + [start]
4039
if start == end:

hashset/randomized_set.py

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
"""
2+
Design a data structure that supports all following operations
3+
in average O(1) time.
4+
5+
insert(val): Inserts an item val to the set if not already present.
6+
remove(val): Removes an item val from the set if present.
7+
get_random: Returns a random element from current set of elements.
8+
Each element must have the same probability of being returned.
9+
"""
10+
11+
12+
class RandomizedSet():
13+
"""
14+
idea:
15+
shit
16+
"""
17+
def __init__(self):
18+
pass
19+
20+
def insert(self, val):
21+
pass
22+
23+
def remove(self, val):
24+
pass
25+
26+
def get_random(self):
27+
pass
28+
29+
30+
if __name__ == "__main__":
31+
rset = RandomizedSet()
32+
rset.insert(1)
33+
rset.insert(2)
34+
rset.insert(3)
35+
36+
rset.remove(2)
37+
38+
print(rset.get_random())
39+
print(rset.get_random())
40+
print(rset.get_random())

0 commit comments

Comments
 (0)