Для стандартной задачи проверяют одну вставку, удаление или замену символа двумя указателями за O(n). В примерах есть ошибки: «кот» → «резать», «каст» и «на» не укладываются в одну такую операцию.
OneEditApart("кот", "собака") -> ложь
Для стандартной задачи проверяют одну вставку, удаление или замену символа двумя указателями за O(n). В примерах есть ошибки: «кот» → «резать», «каст» и «на» не укладываются в одну такую операцию.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
OneEditApart("кот", "собака") -> ложь
OneEditApart("кот", "коты") -> истина
OneEditApart("кот", "резать") -> истина
OneEditApart("кот", "каст") -> истина
OneEditApart("кот", "на") -> истина
OneEditApart("кот", "действия") -> ложь
def OneEditApart(s1, s2) -> bool:
Ответ
Для стандартной задачи проверяют одну вставку, удаление или замену символа двумя указателями за O(n). В примерах есть ошибки: «кот» → «резать», «каст» и «на» не укладываются в одну такую операцию.
Ниже проверяется ровно одна правка; одинаковые строки дают False.
def OneEditApart(s1, s2):
if len(s1) > len(s2):
s1, s2 = s2, s1
if len(s2) - len(s1) > 1:
return False
i = j = edits = 0
while i < len(s1) and j < len(s2):
if s1[i] == s2[j]:
i += 1
j += 1
else:
edits += 1
if edits > 1:
return False
if len(s1) == len(s2):
i += 1
j += 1
edits += len(s2) - j
return edits == 1
«кот» → «коты» даёт True. Для варианта «не более одной правки» последнюю проверку меняют на <= 1. Если подразумевались другие операции, исходные ожидания необходимо уточнить, а не подгонять алгоритм.