Как найти наибольшую чередующуюся подпоследовательность 1s и 0s в строке
Найдите самую большую чередующуюся подпоследовательность 1s и 0s в строке, содержащей только 1s и 0s.также найдите начальный индекс для самой большой подпоследовательности
Пример для 1101011 самая длинная чередующаяся длина подпоследовательности равна 5 от индекса 1 до 5.
Что я уже пробовал:
Попробовал сделать это сравнивая последовательные элементы и если они не равны проверяя текущую длину с максимальным размером
int findSubArray(int arr[], int n) { int sum = 0; int maxsize = -1, startindex = 0; int endindex = 0; int j = 0; for (int i = 0; i < n - 1; i++) { if (arr[i] != arr[i+1] && maxsize < i - j + 1) { maxsize = i - j + 1; startindex = j; } else { j = i; } } endindex = startindex+maxsize-1; if (maxsize == -1) System.out.println("No such subarray"); else System.out.println(startindex+" to "+endindex); return maxsize; }
int [] ia = {1, 1, 0, 1, 0, 1, 1}
findSubArray (ia, 7);
Возвращает: 5 и печатает от 0 до 4
Проблема заключается в том, что, хотя это печатает длину правильно, которая равна 5, индексы неверны. Идеальный выход должен быть от 1 до 5.
Чтобы исправить это, если я сделаю j = i + 1, то все совпадение пойдет на бросок, и я получу индексы от 0 до 0.
В чем заключается ошибка в приведенном выше коде? Кроме того, любой псевдокод для альтернативного подхода поможет?
OriginalGriff
И что же?
Что он делает такого, чего вы не ожидали, или не делает того, что вы сделали?
Какие данные вы ему скормили?
Какие результаты вы получили?
Что вы пытались сделать, чтобы выяснить, почему он это делает?
Что же показывал отладчик происходящего?