345. Reverse Vowels of a String
Содержание
Задача
Задана строка s
. Необходимо перевернуть только гласные буквы в этой строке и вернуть результат.
Гласные буквы: 'a', 'e', 'i', 'o', 'u'
. Они могут встречаться в верхнем и нижнем регистрах, и более одного раза.
Подсказки
Для решения задачи можно использовать два указателя: один с начала строки, другой с конца. Затем можно двигаться этими указателями к центру строки, меняя местами гласные буквы.
Подход
Используем два указателя для итерации по строке: один с начала (left
), другой с конца (right
). Двигаем их к центру, меняя местами гласные буквы, которые они встречают.
Алгоритм
- Инициализируем два указателя:
left
на начало строки,right
на конец. - Конвертируем строку в список для удобства манипуляций.
- Пока
left
<right
:- Находим следующую гласную букву с начала, двигая
left
вправо. - Находим следующую гласную букву с конца, двигая
right
влево. - Меняем местами гласные буквы.
- Находим следующую гласную букву с начала, двигая
- Возвращаем преобразованный список как строку.
Решение
def reverseVowels(s: str) -> str:
vowels = set("aeiouAEIOU") # Создадим множество гласных букв для быстрого поиска
s_list = list(s) # Преобразуем строку в список
left, right = 0, len(s) - 1 # указатели
while left < right:
# Находим следующую гласную с начала строки
while left < right and s_list[left].lower() not in vowels:
left += 1
# Находим следующую гласную с конца строки
while left < right and s_list[right].lower() not in vowels:
right -= 1
# Меняем гласные местами
s_list[left], s_list[right] = s_list[right], s_list[left]
# Двигаем указатели
left += 1
right -= 1
return "".join(s_list)