License Key Formatting
https://leetcode.com/problems/license-key-formatting | Easy |
Условие
Дан строковый ключ s, состоящий из цифр, букв и тире. Дефисы разделяют группы символов, а также могут находиться в начале или конце строки. Требуется отформатировать ключ так, чтобы:
• Все буквы были в верхнем регистре.
• Строка была разделена на группы по K символов.
• Первая группа может содержать меньше символов, если это необходимо.
Верни отформатированный ключ.
Примеры
Input:
s = “5F3Z-2e-9-w”, k = 4Output:
“5F3Z-2E9W”Explanation:
Группы по 4 символа: “5F3Z”, “2E9W”.
Input:
s = “2-5g-3-J”, k = 2Output:
“2-5G-3J”Explanation:
Группы по 2 символа: “2”, “5G”, “3J”.
Решение
fun licenseKeyFormatting(s: String, k: Int): String {
val sb = StringBuilder()
// Проходим по строке и добавляем только буквы и цифры в верхнем регистре
for (char in s) {
if (char != '-') {
sb.append(char.uppercaseChar())
}
}
// Начинаем добавлять дефисы с конца, создавая группы по K символов
var index = sb.length - 1
val formatted = StringBuilder()
var count = 0
while (index >= 0) {
if (count > 0 && count % k == 0) {
formatted.append('-') // Добавляем дефис после каждой группы из K символов
}
formatted.append(sb[index])
count++
index--
}
return formatted.reverse().toString() // Переворачиваем строку перед возвратом
}
Временная сложность
O(n), где n — длина строки s, так как мы проходим по строке дважды.
Пространственная сложность
O(n), так как результат хранится в StringBuilder.