Поиск подмассива в массиве - C#
Формулировка задачи:
Если подмассив найден в массиве, то вернуть нужно минимальный индекс, с которого начинается подмассив в исходном массиве. Например, поиск подмассива "3,4" в массиве "1,2,3,4,3,4" должен вернуть 2. Если подмассив не найден, то вернуть нужно -1. Считайте, что пустой подмассив содержится в любом массиве, начиная с индекса 0.
Как искать отдельные элементы - понятно. А вот как задать поиск целого подмассива, ведь один элемент может совпадать, а другой нет. Скорее всего нужно использовать вложенный цикл, но какие действия он должен производить, непонятно. Подайте хотя б идею. FindSubarrayStartIndex - основной метод поиска, реализовать нужно ContainsAtIndex - который используется в нем
public static void Main()
{
Console.WriteLine(FindSubarrayStartIndex(new[] { 100, 100, 100, 100 }, new[] { 100, 100 }));
Console.WriteLine(FindSubarrayStartIndex(new[] { 1, 2, 3 }, new[] { 2 }));
Console.WriteLine(FindSubarrayStartIndex(new[] { 1, 2, 3 }, new[] { 2, 3 }));
Console.WriteLine(FindSubarrayStartIndex(new[] { 1, 2, 3 }, new[] { 1, 2 }));
Console.WriteLine(FindSubarrayStartIndex(new[] { 1, 2, 3 }, new[] { 1, 2, 3 }));
Console.WriteLine(FindSubarrayStartIndex(new[] { 1, 2, 3 }, new[] { 1, 3 }));
Console.WriteLine(FindSubarrayStartIndex(new[] { 1 }, new[] { 1, 2, 3 }));
Console.WriteLine(FindSubarrayStartIndex(new int[0], new[] { 1, 2, 3 }));
Console.WriteLine(FindSubarrayStartIndex(new[] { 1, 2, 3 }, new int[0]));
Console.WriteLine(FindSubarrayStartIndex(new[] { 1, 2, 1, 2, 3 }, new[] {1, 2, 3}));
Console.WriteLine(FindSubarrayStartIndex(new int[0], new int[0]));
}
public static int FindSubarrayStartIndex(int[] array, int[] subArray)
{
for (int i = 0; i < array.Length - subArray.Length + 1; i++)
if (ContainsAtIndex(array, subArray, i)) return i;
return -1;
}
public static int ContainsAtIndex(int[] array, int[] subArray, i)
{
for(int i = ; i < array.Length;i++)
{
for(j = 0; j < subArray.Length; j++)
{
}
}
}Решение задачи: «Поиск подмассива в массиве»
textual
Листинг программы
public static bool ContainsAtIndex(int[] array, int[] subArray, int index)
{
bool contains = true;
if (subArray.Length > 0)
{
int subLength = subArray.Length;
for (int subIndex = 0; subIndex < subLength; subIndex += 1)
{
if (array[subIndex + index] != subArray[subIndex])
{
contains = false;
break;
}
}
}
return contains;
}