Помогите решить логическую задачу
Санта-Клаус решил разобрать свою клавиатуру, чтобы её почистить. После того, как он поставил все клавиши обратно, он с ужасом понял, что что-то не так: некоторые пары клавиш перепутаны между собой! Таким образом, Санта-Клаус подозревает, что каждая клавиша либо стоит на своём месте, либо заняла место другой, а та другая — на месте первой.
Для того, чтобы убедиться в этом, найти ошибку и восстановить верное расположение, Санта-Клаус набрал текст своей любимой скороговорки, смотря только на надписи на клавиатуре.
Вам даны любимая скороговорка Санта-Клауса и строка, которая получилась в результате набора. Определите, какие пары клавиш Санта-Клаус мог перепутать. Каждая клавиша должна принадлежать не более чем одной паре перепутанных клавиш.
Ответы (1 шт):
Например, так - делаете словарь, и для каждой пары символов на соответствующих позициях записываете в словарь (a:b), где a - меньший по алфавиту символ, если данный ключ ещё не использован.
Если по ключу а найдено другое значение -всё, приехали, здравствуйте, бабушка, выводим -1
Если такое же - ничего не делаем.
В конце вывести пары из словаря, кроме содержащих одинаковые элементы (a:a)
Ввиду ограниченности алфавита можно просто массив на 26 элементов использовать.
def keyboard(s, u):
dict = {}
for i in range(len(s)):
cs = s[i]
cu = u[i]
if cs > cu:
cs, cu = cu, cs
if cs in dict.keys():
t = dict[cs]
if t != cu:
print(-1)
return
else:
dict[cs] = cu
# здесь можно очистить словарь от дубликатов, чтобы счётчик вывести
for cs, cu in dict.items():
if cs != cu:
print(cs, cu)
keyboard("helloworld", "ehoolwlroz")
keyboard("helloworld", "ehoolwlrzz")
keyboard("helloworld", "ehoolwlrlz")
keyboard("gndggadlmdefgejidmmcglbjdcmglncfmbjjndjcibnjbabfab", "fihffahlmhogfojnhmmcflkjhcmflicgmkjjihjcnkijkakgak")