К уважаем заказ и учитываем возможные повторяющиеся элементы, которые вы должны перечислять в последовательности, одним из способов сделать это было бы проверить каждую начальную позицию в нумерации источника, если другая последовательность начинается здесь, например. используя метод расширения:
public static bool ContainsSequence<T>(this IEnumerable<T> source,
IEnumerable<T> other)
{
int count = other.Count();
while (source.Any())
{
if (source.Take(count).SequenceEqual(other))
return true;
source = source.Skip(1);
}
return false;
}
Обратите внимание, что это будет O (п), так худшем случае вы полностью перечислить other
перечисления для каждого элемента в коллекции source
.
Теперь вы можете сделать:
List<string> l1 = new List<string>() { "A", "B", "C" };
List<string> l2 = new List<string>() { "A", "C", "B" };
List<string> l3 = new List<string>() { "B", "C" };
bool l1ContainsL2 = l1.ContainsSequence(l2); //returns false
bool l1ContainsL3 = l1.ContainsSequence(l3); //returns true
может быть дубликатов? – BrokenGlass
да, у нас может быть дубликат. – Behnam