Самая длинная непрерывная последовательность
От: vorona  
Дата: 01.08.12 11:42
Оценка:
На собеседовании попросили написать Linq запрос, выбирающий самую длинную непрерывную последовательность.
У меня получилось так:

using System;
using System.Linq;

static class Program
{
    static void Main(string[] args)
    {
        Object[] s = { "w", "a", "a", "b", "b", "b", "f", "a", "w", "w", "a", "b" };
        var result = s.Select((k, i) => new { k, i }).GroupBy(p => p.k, p => p.i).SelectMany(g => g.Select((i, j) => new { k = g.Key, c = i - j }))
            .GroupBy(p => new { p.k, p.c }, p => p.k, (k, e) => new { k = k.k, c = e.Count() }).Aggregate((p1, p2) => p1.c > p2.c ? p1 : p2);
        Console.WriteLine(String.Format("{0} встречается - {1} раз", result.k, result.c));
    }
}


Может кто знает способ попроще.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.