Почему эта программа не определяет симметричную последовательность?
Вот сама задача: Последовательность чисел назовём симметричной, если она одинаково читается как слева направо, так и справа налево. Например, следующие последовательности являются симметричными:
1 2 3 4 5 4 3 2 1
1 2 1 2 2 1 2 1
Вашей программе будет дана последовательность чисел. Требуется определить, какое минимальное количество и каких чисел надо приписать в конец этой последовательности, чтобы она стала симметричной.
Формат ввода: сначала вводится число N(1 ≤ N ≤ 100), далее идет N чисел-элементы этой последовательности, натуральные числа от 1 до 9.
Решаю задание по симметричной последовательности. Один из закрытых тестов выдает отрицательный ответ. Тк он закрытый, данные я получить не могу. Вот сам код, на большинстве тестов выдает правильный ответ:
x = int(input())
nums = list(map(int, input().split()))
if nums == nums[::-1]:
print(0)
else:
y = 1
for i in range(len(nums)):
if nums[-i - 1] == nums[-i - 2]:
y += 1
else:
break
nums_reverse = nums[:-y]
print(len(nums_reverse))
for i in nums_reverse[::-1]:
print(i, end=" ")
Если возможно, прошу не писать сам код, а просто обьяснить в чем ошибка.
Ответы (1 шт):
Для небольших длин подойдёт простой алгоритм - мы поочерёдно проверяем, является ли суффикс строки длиной n, n-1, n-2..1 палиндромом. Для полной длины n вы уже проверяете, можно делать то же самое с nums[i:]
.
Про дописывание перевернутого префикса вы уже знаете (nums_reverse).