Как сделать данную задачу в функциональном стиле?
Мне нужно сделать замену каждого n-ого повторения символа в строке на определенный символ. Например, пусть n = 3, символ замены - '#', тогда строка подобного вида: "aaabcccbbcccbbb" превратится в такое: "aa#bcc#b#cc#bb#". Как решить эту задачу в функциональном стиле на языке F#? Вот пример функции, сделанной в императивном стиле:
public static string Swap(string word, int n, char swapelem)
{
StringBuilder str = new StringBuilder();
char[] letters = new char[256];
foreach (var c in word)
{
letters[c]++;
str.Append((letters[c] % n == 0) ? swapelem: c);
}
return str.ToString();
}
Ответы (1 шт):
Автор решения: extrn
→ Ссылка
Алгоритм такой
- Индексируем элементы
123456789abcdef
aaabcccbbcccbbb
- Упорядочиваем по значению устойчивой сортировкой
123489def567abc
aaabbbbbbcccccc
- Группируем
123 489def 567abc
aaa bbbbbb cccccc
- Заменяем каждый n-ный элемент группы
123 489def 567abc
aa# bb#bb# cc#cc#
- Сливаем и упорядочиваем по индексу
123456789abcdef
aa#bcc#b#cc#bb#
- Отбрасываем индексы
aa#bcc#b#cc#bb#