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

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

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

Если подмассив найден в массиве, то вернуть нужно минимальный индекс, с которого начинается подмассив в исходном массиве. Например, поиск подмассива "3,4" в массиве "1,2,3,4,3,4" должен вернуть 2. Если подмассив не найден, то вернуть нужно -1. Считайте, что пустой подмассив содержится в любом массиве, начиная с индекса 0.
Листинг программы
  1. public static void Main()
  2. {
  3. Console.WriteLine(FindSubarrayStartIndex(new[] { 100, 100, 100, 100 }, new[] { 100, 100 }));
  4. Console.WriteLine(FindSubarrayStartIndex(new[] { 1, 2, 3 }, new[] { 2 }));
  5. Console.WriteLine(FindSubarrayStartIndex(new[] { 1, 2, 3 }, new[] { 2, 3 }));
  6. Console.WriteLine(FindSubarrayStartIndex(new[] { 1, 2, 3 }, new[] { 1, 2 }));
  7. Console.WriteLine(FindSubarrayStartIndex(new[] { 1, 2, 3 }, new[] { 1, 2, 3 }));
  8. Console.WriteLine(FindSubarrayStartIndex(new[] { 1, 2, 3 }, new[] { 1, 3 }));
  9. Console.WriteLine(FindSubarrayStartIndex(new[] { 1 }, new[] { 1, 2, 3 }));
  10. Console.WriteLine(FindSubarrayStartIndex(new int[0], new[] { 1, 2, 3 }));
  11. Console.WriteLine(FindSubarrayStartIndex(new[] { 1, 2, 3 }, new int[0]));
  12. Console.WriteLine(FindSubarrayStartIndex(new[] { 1, 2, 1, 2, 3 }, new[] {1, 2, 3}));
  13. Console.WriteLine(FindSubarrayStartIndex(new int[0], new int[0]));
  14. }
  15. public static int FindSubarrayStartIndex(int[] array, int[] subArray)
  16. {
  17. for (int i = 0; i < array.Length - subArray.Length + 1; i++)
  18. if (ContainsAtIndex(array, subArray, i)) return i;
  19. return -1;
  20. }
  21. public static int ContainsAtIndex(int[] array, int[] subArray, i)
  22. {
  23. for(int i = ; i < array.Length;i++)
  24. {
  25. for(j = 0; j < subArray.Length; j++)
  26. {
  27. }
  28. }
  29. }
Как искать отдельные элементы - понятно. А вот как задать поиск целого подмассива, ведь один элемент может совпадать, а другой нет. Скорее всего нужно использовать вложенный цикл, но какие действия он должен производить, непонятно. Подайте хотя б идею. FindSubarrayStartIndex - основной метод поиска, реализовать нужно ContainsAtIndex - который используется в нем

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

textual
Листинг программы
  1. public static bool ContainsAtIndex(int[] array, int[] subArray, int index)
  2. {
  3.     bool contains = true;
  4.     if (subArray.Length > 0)
  5.     {
  6.         int subLength = subArray.Length;
  7.         for (int subIndex = 0; subIndex < subLength; subIndex += 1)
  8.         {
  9.             if (array[subIndex + index] != subArray[subIndex])
  10.             {
  11.                 contains = false;
  12.                 break;
  13.             }
  14.         }
  15.     }
  16.     return contains;
  17. }

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


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

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

13   голосов , оценка 4.154 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы