File tree 4 files changed +92
-11
lines changed
4 files changed +92
-11
lines changed Original file line number Diff line number Diff line change 1
1
#https://leetcode.com/problems/group-anagrams/
2
2
class Solution (object ):
3
3
def groupAnagrams (self , strs ):
4
- dic = collections .defaultdict (list )
5
-
6
- for string in strs :
7
- string_count = [0 ]* 26
8
- a = ord ('a' )
9
- for char in string :
10
- string_count [ord (char )- a ] += 1
11
-
12
- dic [tuple (string_count )].append (string )
13
-
14
- return dic .values ()
4
+ anagrams = collections .defaultdict (list )
5
+ for s in strs :
6
+ anagrams ['' .join (sorted (s ))].append (s )
7
+ return anagrams .values ()
Original file line number Diff line number Diff line change
1
+ """
2
+ Let's reverse engineer the process.
3
+ Imagine you are standing at the last index i
4
+ index i-1 will need the value>=1 to go to i (step_need=1)
5
+ index i-2 will need the value>=2 to go to i (step_need=2)
6
+ ...
7
+
8
+ At a certain index x, the value>=step_need
9
+ This means that, from x, we can go to i no problem.
10
+ Now we are standing at x and reset step_need to 0.
11
+ See if we can repeat the process until we reach the first index.
12
+ """
13
+ class Solution (object ):
14
+ def canJump (self , nums ):
15
+ step_need = 0
16
+ for num in reversed (nums [:- 1 ]):
17
+ step_need += 1
18
+ if num >= step_need :
19
+ step_need = 0
20
+ return step_need == 0
Original file line number Diff line number Diff line change
1
+ """
2
+ perform BFS to traverse the whole tree
3
+ after we add the entire level to the string, then we go to the next level
4
+
5
+ by doing this, we can always convert the serialized tree back
6
+ because when you build the tree back
7
+ the order doesn't matter as long as you insert each parent before child
8
+ """
9
+
10
+ from collections import deque
11
+ class Codec :
12
+ def serialize (self , root ):
13
+ if root == None : return ''
14
+ s = ''
15
+ queue = deque ([root ])
16
+ while queue :
17
+ node = queue .popleft ()
18
+ s += str (node .val )+ ','
19
+ if node .left : queue .append (node .left )
20
+ if node .right : queue .append (node .right )
21
+ return s [:- 1 ]
22
+
23
+ def deserialize (self , data ):
24
+ if data == None or data == '' : return None
25
+ data = map (int , data .split (',' ))
26
+ root = TreeNode (data [0 ])
27
+ for i in xrange (1 , len (data )):
28
+ val = data [i ]
29
+ node = root
30
+ while True :
31
+ if val == node .val :
32
+ print ('Input Error' )
33
+ elif val > node .val :
34
+ if node .right == None :
35
+ node .right = TreeNode (val )
36
+ break
37
+ else :
38
+ node = node .right
39
+ else :
40
+ if node .left == None :
41
+ node .left = TreeNode (val )
42
+ break
43
+ else :
44
+ node = node .left
45
+ return root
Original file line number Diff line number Diff line change @@ -13,3 +13,26 @@ def isValid(self, s):
13
13
return False
14
14
15
15
16
+ class Solution (object ):
17
+ def isValid (self , s ):
18
+ stack = []
19
+ for c in s :
20
+ if c == '(' or c == '[' or c == '{' :
21
+ stack .append (c )
22
+ elif c == ')' :
23
+ if stack and stack [- 1 ]== '(' :
24
+ stack .pop ()
25
+ else :
26
+ stack .append (c )
27
+ elif c == ']' :
28
+ if stack and stack [- 1 ]== '[' :
29
+ stack .pop ()
30
+ else :
31
+ stack .append (c )
32
+ elif c == '}' :
33
+ if stack and stack [- 1 ]== '{' :
34
+ stack .pop ()
35
+ else :
36
+ stack .append (c )
37
+ return len (stack )== 0
38
+
You can’t perform that action at this time.
0 commit comments