Files
obsidian/АиСД/Задачи/LeetCode/String Compression.md
T
roma-dxunvrs f57762fd3b Init
2026-09-03 21:40:46 +03:00

29 lines
977 B
Markdown

Leetcode #443 | #Medium | [[Указатель на запись]]
## Идея
Цикл по массиву + цикл по повторам, заводим указатель word и изменяем in-place, сжатие гарантирует что мы не выйдем за пределы массива
## [[Big-O]]
- Время ```O(N)```
- Память ```O(1)```
## Код
```Java
class Solution {
public int compress(char[] chars) {
int write = 0;
for (int i = 0; i < chars.length; i++) {
int count = 1;
char currentChar = chars[i];
while (i + 1 < chars.length && chars[i + 1] == chars[i]) {
i++;
count++;
}
chars[write++] = currentChar;
if (count > 1) {
for (char c : String.valueOf(count).toCharArray()) {
chars[write++] = c;
}
}
}
return write;
}
}
```