Поиск подмассива в массиве - C#

Узнай цену своей работы

Формулировка задачи:

Если подмассив найден в массиве, то вернуть нужно минимальный индекс, с которого начинается подмассив в исходном массиве. Например, поиск подмассива "3,4" в массиве "1,2,3,4,3,4" должен вернуть 2. Если подмассив не найден, то вернуть нужно -1. Считайте, что пустой подмассив содержится в любом массиве, начиная с индекса 0.
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++)
        {
            
        }
    }
}
Как искать отдельные элементы - понятно. А вот как задать поиск целого подмассива, ведь один элемент может совпадать, а другой нет. Скорее всего нужно использовать вложенный цикл, но какие действия он должен производить, непонятно. Подайте хотя б идею. FindSubarrayStartIndex - основной метод поиска, реализовать нужно ContainsAtIndex - который используется в нем

Решение задачи: «Поиск подмассива в массиве»

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;
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

13   голосов , оценка 4.154 из 5
Похожие ответы