Задачи
December 10, 2024
Сжимаем строки: эффективный алгоритм работы с повторяющимися символами
Задача. Дана строка str, необходимо сжать ее следующим образом. Если строка не пустая, выполните следующую операцию:
- Удалите из слова префикс максимальной длины, состоящий из одного символа str[i], повторяющегося не более 9 раз.
- Добавьте к результирующей строке длину префикса, за которым следует символ str[i].
1. str = "abcde"
Output: "1a1b1c1d1e"
2. str = "aaaaaaaaaaaaaabb"
Output: "9a5a2b"
Разбор
При обходе строки, запускаем вложенный цикл, который для текущего символа найдет количество его следующих повторений, но не более 9 раз.
Далее мы добавим символ и количество его повторений в результирующую строку.
Реализация
static string CompressedStr(string str) {
var res = new StringBuilder();
int index = 0;
while (index < str.Length)
{
int count = 0;
var curr = str[index];
while(index < str.Length && count < 9 && str[index] == curr) {
count++;
index++;
}
res.Append(count).Append(curr);
}
return res.ToString();
}https://gist.github.com/unilecs/cd637d92c56f5f77e2b9f6caa924b23e