File tree Expand file tree Collapse file tree 2 files changed +43
-17
lines changed
longest-repeating-character-replacement Expand file tree Collapse file tree 2 files changed +43
-17
lines changed Original file line number Diff line number Diff line change 88
99class Solution :
1010 def cloneGraph (self , node : Optional ['Node' ]) -> Optional ['Node' ]:
11+ # dfs
1112 if not node :
1213 return
1314
14- clones = {}
15-
16- def dfs (node ):
17- if node in clones :
18- return clones [node ]
19- clone = Node (node .val )
20- clones [node ] = clone
21- for nei in node .neighbors :
22- clone .neighbors .append (dfs (nei ))
23- return clone
15+ clone = Node (node .val )
16+ graph = {node :clone }
17+ stack = [node ]
18+
19+ while stack :
20+ node = stack .pop ()
21+ for n in node .neighbors :
22+ if n not in graph :
23+ stack .append (n )
24+ graph [n ] = Node (n .val )
25+ graph [node ].neighbors .append (graph [n ])
2426
25- return dfs ( node )
27+ return clone
2628
2729 def bfs (self , node ):
28- if not node :
30+ if not node :
2931 return
3032
31- clone = Node (node .val )
32- clones = {node : clone }
33+ clone = Node (node .val ) # clone first node
34+ clones = {node : clone } # reference node : clone node
3335 queue = deque ([node ])
3436 while queue :
3537 node = queue .popleft ()
3638 for nei in node .neighbors :
3739 if nei not in clones :
38- clones [nei ] = Node (nei .val )
39- queue .append (nei )
40- clones [node ].neighbors .append (clones [nei ])
40+ clones [nei ] = Node (nei .val ) # clone node
41+ queue .append (nei ) # append queue neighbor reference node
42+ clones [node ].neighbors .append (clones [nei ])
4143 return clone
Original file line number Diff line number Diff line change 1+ from collections import defaultdict
2+
3+ class Solution :
4+ def characterReplacement (self , s : str , k : int ) -> int :
5+ """
6+ Time complexity O(n)
7+ Space complexity O(1)
8+
9+ Sliding window
10+ """
11+ start , end = 0 , 0
12+ window = defaultdict (int )
13+ max_len = 0
14+
15+ while end < len (s ):
16+ window [s [end ]] += 1
17+ while end - start + 1 - max (window .values ()) > k :
18+ window [s [start ]] -= 1
19+ start += 1
20+ # move idx
21+ max_len = max (max_len , end - start + 1 )
22+ end += 1
23+
24+ return max_len
You can’t perform that action at this time.
0 commit comments