Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- static string MostFrequentTriplet(string str, CancellationToken ct)
- {
- /*для тестов
- Stopwatch sw = new Stopwatch();
- sw.Start();
- для тестов*/
- //коллекция, где будет хранится информация обо всех найденных триплетах и их количестве
- Dictionary<string, int> triplets = new Dictionary<string, int>();
- //данная строка, разделённая на слова
- String[] SplittedStr = str.Split(',');
- //первый параллельный цикл, который движется по словам из массива SplittedStr
- Parallel.ForEach(SplittedStr, (s) =>
- {
- //второй параллельный цикл, который движется по буквам из слов массмва SplittedStr (до 3 с конца буквы в каждом слове, т.к. необходимо извлечение только триплетов)
- Parallel.For(0, s.Length - 2, (i) =>
- {
- //выделение триплетов
- string SubStr = s.Substring(i, 3);
- //инкрементирование позиции Value, соответсвуещего Key. если текущий триплен не уникален
- if (triplets.ContainsKey(SubStr))
- {
- triplets[SubStr]++;
- }
- //добавление триплета в коллекцию, если он уникальный
- else
- {
- triplets[SubStr] = 1;
- }
- //проверка на отмену операции
- ct.ThrowIfCancellationRequested();
- });
- //проверка на отмену операции
- ct.ThrowIfCancellationRequested();
- });
- //максимальное количество триплетов
- int MaxQuantity = triplets.Max(it => it.Value);
- //строка для вывода
- string result = "";
- //третий параллельный цикл для выбора максимальных Value и добавления в result соответствующих полей
- Parallel.ForEach(triplets, (i) =>
- {
- if (i.Value == MaxQuantity)
- {
- if (result != "") result += ",";
- result += i.Key;
- }
- //проверка на отмену операции
- ct.ThrowIfCancellationRequested();
- });
- result += "\t" + MaxQuantity.ToString();
- /*для тестов
- Console.WriteLine(String.Join(Environment.NewLine,
- triplets.OrderByDescending(it => it.Value).Select(it => it.Key + ": " + it.Value)));
- sw.Stop();
- Console.WriteLine("Time:" + (sw.ElapsedMilliseconds).ToString());
- для тестов */
- return result;
- }
Advertisement
Add Comment
Please, Sign In to add comment