Найти в Дзене

😎 ЯНДЕКССОБЕС: Минимальное расстояние между X и Y

😎 ЯНДЕКССОБЕС: Минимальное расстояние между X и Y На собеседовании мне дали простую, но коварную задачу: Дана строка, содержащая только символы X, Y и O. Нужно найти кратчайшее расстояние между X и Y. Если один из символов отсутствует — вернуть 0. Примеры: "XY" -> 1 "YOX" -> 2 "OOOXOOYOXOXO" -> 2 "YY" -> 0 "XX" -> 0 🤔 На первый взгляд задача кажется тривиальной — просто найти X и Y. Но опытный разработчик сразу задаст себе несколько умных вопросов: 1. А если X и Y встречаются несколько раз? 2. А если строка пустая? 3. А что считать расстоянием — количество символов между или разницу индексов? 4. Есть ли ограничения по длине строки? После обсуждения стало понятно, что нужно находить минимальную разницу между позициями X и Y, вне зависимости от порядка. Вот компактное решение: def distance(input: str) -> int: index_x = None index_y = None way = len(input) + 1 for index, value in enumerate(input): if value == "X": index_x = index elif value == "Y": index_y = index if index_x != Non

😎 ЯНДЕКССОБЕС: Минимальное расстояние между X и Y

На собеседовании мне дали простую, но коварную задачу:

Дана строка, содержащая только символы X, Y и O. Нужно найти кратчайшее расстояние между X и Y.

Если один из символов отсутствует — вернуть 0.

Примеры:

"XY" -> 1

"YOX" -> 2

"OOOXOOYOXOXO" -> 2

"YY" -> 0

"XX" -> 0

🤔 На первый взгляд задача кажется тривиальной — просто найти X и Y. Но опытный разработчик сразу задаст себе несколько умных вопросов:

1. А если X и Y встречаются несколько раз?

2. А если строка пустая?

3. А что считать расстоянием — количество символов между или разницу индексов?

4. Есть ли ограничения по длине строки?

После обсуждения стало понятно, что нужно находить минимальную разницу между позициями X и Y, вне зависимости от порядка.

Вот компактное решение:

def distance(input: str) -> int:

index_x = None

index_y = None

way = len(input) + 1

for index, value in enumerate(input):

if value == "X":

index_x = index

elif value == "Y":

index_y = index

if index_x != None and index_y != None:

if way > abs(index_x - index_y):

way = abs(index_x - index_y)

if index_x != None and index_y != None:

result = way

else:

result = 0

return result

🚀 Что это даёт на практике?

1. Понимание работы с указателями и перебором.

2. Умение анализировать граничные случаи.