Как написать функцию ,которая будет выделять полиндромы в строке и выводит их ,удаляя одинаковые?
Написать функцию palindrome, которая для заданного числа num возвращает список всех числовых палиндромов, содержащихся в каждом номере. Массив должен быть отсортирован в порядке возрастания, а любые дубликаты должны быть удалены.
Пример:
palindrome(34322122) => [22, 212, 343, 22122]
import traceback
def palindrome(num):
# Тесты
try:
assert palindrome(1551) == [55, 1551]
assert palindrome(221122) == [11, 22, 2112, 221122]
assert palindrome(10015885) == [88, 1001, 5885]
assert palindrome(13598) == []
except AssertionError:
print("TEST ERROR")
traceback.print_exc()
else:
print("TEST PASSED")
Ответы (2 шт):
Автор решения: Zhihar
→ Ссылка
что мешает решить задачу в лоб за O(n^2) времени?
text = "34322122"
res = set()
for pos in range(len(text) - 1):
for size in range(2, len(text) - pos + 1):
block = text[pos: pos + size]
if block == block[::-1]:
res.add(block)
print(*res, sep='\n')
Автор решения: n1tr0xs
→ Ссылка
Например, так:
def palindrome(num):
result = set()
text = str(num)
for i in range(len(str(num))):
for j in range(i+2, len(str(num))+1):
sub = text[i:j]
if int(sub) and (sub == sub[::-1]):
result.add(int(sub))
return sorted(result)