У меня есть несколько последовательностей следующим образом
Я храню их в списке списка строк
List<List<String>> Sequences;
Я хотел бы объединить их, чтобы удалить последовательности, которые покрыты другими последовательностями. Например, последовательность V VPC VPS S
покрывается последовательностью V MV VPC VPC VPS VPA S
, поскольку последняя содержит все элементы первой и в том же порядке (этого примера нет в приведенных выше списках).
Я думаю, что должны быть простые решения с Linq
, однако я не освоился с этим.
Мой подход состоит в том, чтобы перебирать последовательности и для каждой последовательности находить последовательности, которые пересекаются с ней сами по себе и имеют тот же порядок, если да, то удалить его, что-то вроде
foreach (var item in Sequences)
{
if (Sequences.Any(x => x.Intersect(item).SequenceEqual(item)))
{
Sequences.Remove(item);
}
}
a c f
изa b c d e f
- person Ahmad   schedule 11.02.2016V VPC VPS S
покрывается последовательностьюV MV VPC VPC VPSD VPA S
, поскольку последняя содержит все элементы первой и в том же порядке. - Нет,VPS
есть в первом, а не во втором. - person Enigmativity   schedule 11.02.2016