Skip to content

Commit

Permalink
Create smallest-equivalent-str.py
Browse files Browse the repository at this point in the history
Finds the smallest lexicographically same string given two keywords defining relations.
  • Loading branch information
gabedonnan authored Jan 14, 2023
1 parent 61ad813 commit 4e98bb9
Showing 1 changed file with 44 additions and 0 deletions.
44 changes: 44 additions & 0 deletions smallest-equivalent-str.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,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

0 comments on commit 4e98bb9

Please sign in to comment.