-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathsmallest-equivalent-str.py
44 lines (33 loc) · 1.32 KB
/
smallest-equivalent-str.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
class Solution:
def smallestEquivalentString(self, s1: str, s2: str, baseStr: str) -> str:
relations = {}
for i in range(len(s1)):
if s1[i] not in relations:
relations[s1[i]] = []
if s2[i] not in relations:
relations[s2[i]] = []
relations[s1[i]].append(s2[i])
relations[s2[i]].append(s1[i])
temp_middle = []
temp_middle.extend(relations[s2[i]])
temp_middle.extend(relations[s1[i]])
relations[s1[i]] = temp_middle
relations[s2[i]] = temp_middle
relations[s1[i]] = list(set(relations[s1[i]]))
relations[s2[i]] = list(set(relations[s2[i]]))
changedflag = False
while not changedflag:
changedflag = True
for item in relations:
for char in relations[item]:
if len(relations[char]) > len(relations[item]):
changedflag = False
relations[item] = list(set(relations[char] + relations[item]))
break
final = ""
for char in baseStr:
if char in relations:
final += min(relations[char])
else:
final += char
return final