https://leetcode.com/problems/reverse-string-ii Easy

Условие

Дана строка s и целое число k. Необходимо изменить строку следующим образом: каждые 2 * k символов переворачиваются первые k символов. Если оставшихся символов меньше чем k, перевернуть все оставшиеся символы. Если оставшихся символов больше или равно k, но меньше чем 2 * k, перевернуть только первые k символов, а остальные оставить без изменений.

Примеры

Input: s = "abcdefg", k = 2 Output: "bacdfeg”

Input: s = "abcd", k = 2 Output: "bacd”

Решение

fun reverseStr(s: String, k: Int): String {
    val chars = s.toCharArray()
    var i = 0

    // Проходим по строке с шагом 2 * k
    while (i < chars.size) {
        // Определяем границы для переворота
        var left = i
        var right = minOf(i + k - 1, chars.size - 1)

        // Переворачиваем первые k символов
        while (left < right) {
            val temp = chars[left]
            chars[left] = chars[right]
            chars[right] = temp
            left++
            right--
        }

        // Переходим к следующему блоку из 2 * k символов
        i += 2 * k
    }

    // Преобразуем массив символов обратно в строку
    return String(chars)
}

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

O(n) — Один проход по строке длины n.

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

O(n) — Используем дополнительный массив символов для изменения строки.