-
Notifications
You must be signed in to change notification settings - Fork 6
/
Copy pathsmallest_string_with_swaps.py
31 lines (25 loc) · 1.01 KB
/
smallest_string_with_swaps.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
class Solution:
def smallestStringWithSwaps(self, s: str, pairs: List[List[int]]) -> str:
def dfs(node, subgraph):
if node not in seen:
seen.add(node)
subgraph.append(node)
for neighbor in graph[node]:
dfs(neighbor, subgraph)
seen = set()
graph = defaultdict(list)
for src, dest in pairs:
graph[src].append(dest)
graph[dest].append(src)
res = list(s)
for node in graph.keys():
if len(seen) == len(res):
return ''.join(res)
sub_graph = []
dfs(node, sub_graph)
if len(sub_graph) != 0:
sub_graph = sorted(list(set(sub_graph)))
sub_char = sorted([s[i] for i in sub_graph])
for x, y in zip(sub_graph, sub_char):
res[x] = y
return ''.join(res)