Задачи
December 10
Сжимаем строки: эффективный алгоритм работы с повторяющимися символами
Задача. Дана строка 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