Как проверить номер палиндрома в Python?

Опубликовано: 2020-11-30

Оглавление

Что такое палиндром?

Палиндром — это слово, число или любая последовательность символов, которая читается одинаково как в прямом, так и в обратном направлении.

Несколько примеров: detarrated, 1567651, 02.02.2020, малаялам

Итак, в этой статье показаны различные способы написания программы для проверки того, является ли заданный ввод палиндромом или нет, с использованием Python.

Способ 1:

Самое наивное решение, которое приходит на ум, — перевернуть число и проверить, совпадает ли оно с введенным числом. Это можно сделать следующим образом:

число = интервал (ввод ());

реверс = 0

пока число > 0:

цифра = число % 10

реверс = реверс * 10 + цифра

число = число // 10

если число == обратное:

print("Это палиндром!")

еще:

print("это не палиндром!")

Однако это ставит под угрозу читабельность кода и требует больше строк кода, чем требуется. Ознакомьтесь с нашим онлайн-курсом по науке о данных, чтобы узнать больше.

Вот короткий и приятный способ проверить число, используя всего одну строку.

Способ 2:

Хитрость заключается в том, чтобы принять входное число как тип данных str вместо int. Затем вы можете использовать технику нарезки [::-1], чтобы получить обратную строку и проверить равенство в самом операторе if .

число = ввод ()

если число == число[::-1]:

print("Это палиндром!")

еще:

print("это не палиндром!")

Способ 3:

Это рекурсивный метод проверки, является ли массив палиндромом или нет.

def isPalindrome (числа, начало, конец):

если начало >= конец:

вернуть Истина

если числа [начало] == числа [конец]:

return isPalindrome(числа, начало + 1, конец – 1)

еще:

вернуть ложь

числа = список (карта (int, input (). Разделить ()))

n=len(числа)

если этоПалиндром (числа, 0, n-1):

print("Это палиндром!")

еще:

print("это не палиндром!")

Функция isPalindrome проверяет, совпадают ли первый и последний элементы массива. Если нет, функция немедленно возвращает False. В противном случае он рекурсивно проверяет следующие крайние элементы, пока два указателя не встретятся посередине.

Читайте: Идеи и темы проекта Python

Общие вопросы интервью по кодированию, связанные с палиндромами

# 1 Самая длинная палиндромная подстрока

Учитывая только одну строку в качестве входных данных, вы должны вернуть длину самой длинной палиндромной подстроки в строке.

Например:

Ввод: 'acbcbabcc'

Выход: 5 ('cbabc')

Подход:

Если мы попытаемся связать это с одной из самых распространенных проблем DP, самой длинной общей подстрокой, то здесь разница в том, что нам дается только одна входная строка, тогда как LCS использует две строки. Поскольку мы знаем, что палиндром в точности равен своему обращению, мы можем сделать вторую строку обратной для нашего заданного ввода.

Теперь это становится точно таким же, как поиск LCS.

def LCSubstr(A, B, m, n):

LCSub = [[0 для i в диапазоне (n+1)] для j в диапазоне (m+1)]

Ответ = 0

для я в диапазоне (м + 1):

для j в диапазоне (n+1):

если (i == 0 или j == 0):

LCSub[i][j] = 0

Элиф A[i-1] == B[j-1]:

LCSub[i][j] = 1 + LCSub[i-1][j-1]

анс = макс(анс, LCSub[i][j])

еще:

LCSub[i][j] = 0

возврат ответа

строка1 = ввод ()

строка2 = строка1[::-1]

м = лен(стр1)

n = длина (str2)

print('Длина самой длинной палиндромной подстроки = ', LCSubstring(str1, str2, m, n))

Итак, для приведенного выше ввода мы получаем две строки как

'acbcbabcc' и

'ccbabcbca'

Самая длинная общая подстрока становится «cbabc» длиной 5.

# 2 Проверить, является ли анаграмма строки палиндромом

Учитывая строку в качестве входных данных, вы должны проверить, может ли какая-либо анаграмма строки быть палиндромом или нет, и соответственно вернуть да/нет.

Например:

Ввод: 'питонпитон'

Выход: Да

(хотя сама строка не является палиндромом, возможная анаграмма 'pythonnohtyp' действительно образует палиндром)

Ввод: 'Гаррипоттер'

Выход: Нет

Подход:

Если вы обратите внимание, всякий раз, когда у нас есть палиндромная строка четной длины, все символы в первой половине повторяются во второй половине. Это означает, что все символы, присутствующие в строке, встречаются четное количество раз.

Если длина нечетная, все символы слева от среднего элемента (не включительно) встречаются одинаковое количество раз справа от среднего элемента. Это означает, что только один символ встречается нечетное количество раз (средний элемент), а все остальные встречаются четное количество раз.

Используя эту логику, мы можем сохранить количество символов в строке в хеше и проверить эти ограничения, чтобы получить требуемый ответ.

CHAR_RANGE = 256

строка1 = ввод ()

freq = [0 для i в диапазоне (CHAR_RANGE)]

для я в str1:

freq[ord(i)] += 1 #ord(x) дает значение юникода для x

количество_коэффициентов = 0

для i в диапазоне (CHAR_RANGE):

если частота [i] & 1:

num_odds += 1

если (num_odds > 1):

распечатать("Да")

еще:

распечатать("Нет")

Заключение

В заключение, задачи на палиндром очень распространены и интересны. Они полезны для решения различных математических головоломок и вопросов соревновательного программирования.

Если вам интересно узнать о науке о данных, ознакомьтесь с программой IIIT-B & upGrad Executive PG по науке о данных, которая создана для работающих профессионалов и предлагает более 10 тематических исследований и проектов, практические семинары, наставничество с отраслевыми экспертами, 1 -на-1 с отраслевыми наставниками, более 400 часов обучения и помощи в трудоустройстве в ведущих фирмах.

Какова временная сложность программы Палиндром?

Количество элементарных операций, выполняемых методом, часто используется для оценки временной сложности, предполагая, что выполнение каждого элементарного процесса занимает определенное количество времени. Временная сложность определения того, является ли число палиндромом, составляет O (log10 (n)). Когда мы проверяем, являются ли значения палиндромом, мы делим число или значение на десять на каждой итерации. В результате временная сложность равна количеству цифр в числе.

Чем / отличается от оператора // в Python?

Когда мы используем оператор деления, т. е. одну косую черту (/) в Python, компилятор просто делит два значения справа и слева от косой черты. Но когда мы используем двойную косую черту (//), т. е. деление пола, мы просим компилятор выполнить типичный процесс деления, но в результате получается максимально возможное целое число, близкое к ответу. Это целое число меньше или равно результату обычного деления.

Какова зарплата начального уровня разработчика Python?

Общеизвестно, что Python широко используется в большинстве отраслей и компаний, что делает Python вторым по величине языком вычислений. Python также является любимым языком программирования среди студентов и профессионалов, потому что он прост в освоении и обладает высокой гибкостью. Начальная зарплата разработчика Python в Индии составляет в среднем около 4 27 293 индийских рупий в год. Профессионалы, изучающие Python, имеют много возможностей, поскольку Python также используется в других областях, таких как наука о данных и машинное обучение.