Reverse Vowels of a String
https://leetcode.com/problems/reverse-vowels-of-a-string/description/ | Easy |
Условие
Дана строка s. Необходимо изменить порядок всех гласных в строке, не изменяя порядок остальных символов, и вернуть полученную строку.
Гласные буквы в английском языке: a, e, i, o, u, а также их заглавные формы A, E, I, O, U.
Примеры
Input:
s = "IceCreAm”Output:
"AceCreIm”Explanation:
Гласные в s — это [‘I’, ‘e’, ‘e’, ‘A’]. После изменения порядка гласных строка s становится “AceCreIm”.
Input:
s = "leetcode”Output:
"leotcede”
Решение
fun reverseVowels(s: String): String {
val vowels = setOf('a', 'e', 'i', 'o', 'u', 'A', 'E', 'I', 'O', 'U') // Множество гласных
val chars = s.toCharArray() // Преобразуем строку в массив символов для изменения
var left = 0 // Указатель на левую сторону
var right = s.length - 1 // Указатель на правую сторону
while (left < right) {
// Сдвигаем левый указатель, пока не найдем гласную
while (left < right && chars[left] !in vowels) {
left++
}
// Сдвигаем правый указатель, пока не найдем гласную
while (left < right && chars[right] !in vowels) {
right--
}
// Меняем местами найденные гласные
val temp = chars[left]
chars[left] = chars[right]
chars[right] = temp
left++
right--
}
return String(chars) // Возвращаем измененную строку
}
Временная сложность
O(n), где n — длина строки, так как каждый символ проверяется один раз.
Пространственная сложность
O(n), так как используется массив символов для изменения строки.