Reverse String

https://leetcode.com/problems/reverse-stringEasy

Условие

Напишите функцию, которая переворачивает строку. Входная строка задается как массив символов s.

Примеры

Input: s = ["h", "e", "l", "l", "o"]

Output: ["o", "l", "l", "e", "h"]
Input: s = ["H", "a", "n", "n", "a", "h"]

Output: ["h", "a", "n", "n", "a", "H"]

Решение

/**
 * В Kotlin можно эффективно решить эту задачу, используя два указателя, 
 * чтобы обменивать элементы с обоих концов массива, пока указатели не встретятся в середине.
 */
fun reverseString(s: CharArray) {
    var left = 0 // Начало массива
    var right = s.size - 1 // Конец массива
    
    // Цикл продолжается до тех пор, пока указатели не пересекутся, что означает, что массив перевернут.
    while (left < right) {
        // Меняем местами элементы на позициях left и right
        val temp = s[left]
        s[left] = s[right]
        s[right] = temp
        
        // Двигаем указатели
        left++
        right--
    }
}

Временная сложность

O(n), где n — это количество элементов в массиве. Это связано с тем, что каждая итерация цикла выполняется за постоянное время и цикл выполняется n/2 раз.

Пространственная сложность

O(1), поскольку используется фиксированное количество дополнительной памяти, которое не зависит от размера входных данных.