Всем привет. Сегодня пятница и мы разбираем новую задачу.
Сложность: 🟢 Легкая
ℹ️ Описание
Вам дана строка s. Напишите функцию, которая развернёт в ней все гласные и вернет новую строку в качестве результата.
В строке могут встречаться следующие гласные: a, e, i, o, и u как в верхнем, так и в нижнем регистре.
⚠️ Ограничения
— В строке может быть от 1 до 3 * 10^5 символов
— Строка состоит из печатных ASCII символов
— Символы могут быть в верхнем и нижнем регистре
1️⃣ Пример
Входящие данные
hello
Ответ
holle
2️⃣ Пример
Входящие данные
algorithmics
Ответ
ilgirothmacs
3️⃣ Пример
Входящие данные
ab
Ответ
ab
✅ Решение
В первую очередь нам нужно уметь быстро за константное время определять, является ли конкретная буква гласной. Для этого мы заведем структуру, в которой перечислим все возможные буквы в обоих регистрах.
const dict = new Set(['a', 'e', 'i', 'o', 'u', 'A', 'E', 'I', 'O', 'U'])
Мы перечисляем возможные буквы сразу в двух регистрах, чтобы каждый раз во время вычислений не приводить очередной символ из строки к нижнему регистру для сравнения. Так мы немного экономим время.
Теперь нужно реализовать разворот гласных. Для этого заведем два указателя:
— leftIdx равен нулю
— rightIdx равен индексу последнего символа встроке
Чтобы правильно реализовать разворот, мы будем поочередно двигать левый и правый индексы, пока каждый из них не будет указывать на гласную букву. Как только это произойдет, поменяем буквы местами и будем повторять этот алгоритм до тех пор, пока leftIdx < rightIdx.
Посмотреть реализацию в блоге
#strings #easy