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), так как используется массив символов для изменения строки.