Запоминайте последние позиции X и Y; при встрече одного символа сравнивайте расстояние до последнего противоположного. Число позиций между ними равно разности индексов минус один.
Минимальное расстояние между символами X и Y
Запоминайте последние позиции X и Y; при встрече одного символа сравнивайте расстояние до последнего противоположного. Число позиций между ними равно разности индексов минус один.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Имеется строка, содержащая только символы «X», «Y» и «O». Необходимо вычислить наименьшее количество позиций между любой парой символов «X» и «Y». Если хотя бы один из этих символов в строке отсутствует, функция должна вернуть 0.
def distance(s: str) -> int:
...
Ответ
Запоминайте последние позиции X и Y; при встрече одного символа сравнивайте расстояние до последнего противоположного. Число позиций между ними равно разности индексов минус один.
def distance(s):
last_x = last_y = None
best = None
for index, char in enumerate(s):
if char == 'X':
last_x = index
other = last_y
elif char == 'Y':
last_y = index
other = last_x
else:
continue
if other is not None:
gap = index - other - 1
best = gap if best is None else min(best, gap)
return 0 if best is None else best
Для XOY ответ 1, для XY — 0. По условию отсутствие хотя бы одного типа символов тоже обозначается нулём. Время O(n), память O(1).