https://leetcode.com/problems/reverse-string-ii | Easy |
---|
Дана строка s
и целое число k
. Необходимо изменить строку следующим образом: каждые 2 * k символов переворачиваются первые k символов. Если оставшихся символов меньше чем k, перевернуть все оставшиеся символы. Если оставшихся символов больше или равно k, но меньше чем 2 * k, перевернуть только первые k символов, а остальные оставить без изменений.
Input:
s = "abcdefg", k = 2Output:
"bacdfeg”
Input:
s = "abcd", k = 2Output:
"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) — Используем дополнительный массив символов для изменения строки.