-
Notifications
You must be signed in to change notification settings - Fork 1.6k
/
Copy pathphone-number-prefix.py
48 lines (42 loc) · 1.34 KB
/
phone-number-prefix.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
# Time: O(l * nlogn)
# Space: O(1)
# sort
class Solution(object):
def phonePrefix(self, numbers):
"""
:type numbers: List[str]
:rtype: bool
"""
numbers.sort()
return all(not numbers[i+1].startswith(numbers[i]) for i in xrange(len(numbers)-1))
# Time: O(n * l)
# Space: O(t)
# trie
class Solution2(object):
def phonePrefix(self, numbers):
"""
:type numbers: List[str]
:rtype: bool
"""
class Trie(object):
def __init__(self):
self.__nodes = []
self.__new_node()
def __new_node(self):
self.__nodes.append([-1]*(10+1))
return len(self.__nodes)-1
def add(self, s):
made = False
curr = 0
for i in xrange(len(s)):
x = ord(s[i])-ord('0')
if self.__nodes[curr][x] == -1:
self.__nodes[curr][x] = self.__new_node()
made = True
elif self.__nodes[self.__nodes[curr][x]][-1] == True:
return False
curr = self.__nodes[curr][x]
self.__nodes[curr][-1] = True
return made
trie = Trie()
return all(trie.add(x) for x in numbers)