Задача с собеседования в Яндекс
Дана строка, состоящая из букв 'X', 'Y' и 'O'.
Нужно найти кратчайшее расстояние между буквами 'X' и 'Y'.
Если хотя бы одна из букв отсутствует — вывести 0. Кстати задачу обсуждали ранее в нашем чате крутых алгоритмистов😎😎
Решение:
Решение за один проход по строке: запоминаем последние позиции X и Y, на каждой итерации обновляем ответ
def shortest_distance(s):
last_x = last_y = -1
min_dist = float('inf')
for i, ch in enumerate(s):
if ch == 'X':
last_x = i
if last_y != -1:
min_dist = min(min_dist, abs(last_x - last_y))
elif ch == 'Y':
last_y = i
if last_x != -1:
min_dist = min(min_dist, abs(last_x - last_y))
return min_dist if min_dist != float('inf') else 0
Асимптотика O(N)
@algoses
Post #381
7.09K
- 👍 13
- ❤ 3
- 🥱 2
- 👏 1
- 😁 1