Рубрики
Без рубрики

7 Способов решения Палиндромных программ на Python

Строки и числа, которые одинаковы, даже если они перевернуты, являются палиндромами. Мы можем проверить, является ли строка или число палиндромом в Python.

Автор оригинала: Team Python Pool.

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

Палиндром – это строка или число, которое, если повернуть вспять, равно исходному значению. Например, если мы перевернем строку MALAYALAM, мы получим обратно исходную строку. Кроме того, если мы перевернем число 12321, мы получим 12321 обратно. Они известны как палиндромы.

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

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

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

  1. Проверьте Палиндром с помощью нарезки (slicing) в Python
  2. Проверьте Палиндром с помощью функции reversed() В Python
  3. Проверьте Палиндром с помощью цикла while в Python
  4. Проверка того, является ли число палиндромом в Python с помощью цикла
  5. Проверка того, является ли фраза палиндромом в Python
  6. Как найти самую длинную палиндромную подстроку в строке

1. Проверьте Palindrome с помощью нарезки в Python

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

def check_palindrome(string):
    # transversing the string from last to first
    reversed_string = string[::-1]
        if string == reversed_string:
            print(string, "is a palindrome")
        else:
            print(string, "is not a Palindrome")
    
if name=='main':
    check_palindrome("RADAR")
    check_palindrome("PythonPool")
Output-
RADAR is a palindrome
PythonPool is not a Palindrome

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

2. Проверьте Палиндром с помощью цикла в Python

def is_palindrome(string):
    reversed_string = ""
    # transversing through string from last
    for i in range(len(string), 0, -1):
        # Addind last characters of string into a new string
        reversed_string += string[i-1]
        if string == reversed_string:
            print("Palindrome")
        else:
            print("Not a palindrome")
            
if __name__ == __'main'__:
    is_palindrome("racecar")
    is_palindrome("Python")
Output-
Palindrome
Not a palindrome

3. Проверьте Палиндром С Помощью функции reversed() в Python

string="MALAYALAM"
# joining characters of reversed string one by one
reversed_string = ''.join(reversed(string))
    if reversed_string == string:
        print(string," is Palindrome")
    else:
        print(string,"Not a Palindrome")
Output-
MALAYALAM is Palindrome

4. Проверьте на Палиндром с помощью цикла while в Python

def check_palindrome(string):
    l = len(string)
    first = 0
    last = l - 1
    isPalindrome = True
    
    # ensuring that we do not iterate through more than half                          #   of the list
    while first < last:
        # if the first character is same as last character keep     #       moving further
        if string[first] == string[last]:
            first = first + 1
            last = last - 1
     # if the characters at first and last do not match break #      the loop
     else:
        isPalindrome = False
        break
        
    return isPalindrome


if __name__ == __'main'__:
    isPalindrome = check_palindrome("MADAM")

    if isPalindrome:
        print("It is a palindrome ")
    else:
        print("Not a Palindrome")
Output-
It is a palindrome

5. Проверка является ли число Палиндромом в Python с помощью цикла

Мы будем использовать следующую концепцию:
Число = 12321
Остаток этого числа, деленный на 10, равен:
Число% 10 = 12321% 10 = 1
Reverse_Number=Remainder=1
Затем мы разделим число на 10.
Число = Number/10 = 12321//10 = 1232
Остаток = 1232% 10 = 2
Reverse_Number=Remainder=12
Число = 1232/10 = 123
Остаток = 123% 10 = 3
Reverse_Number=Remainder=123
Число = 123/10 = 12
Остаток = 12% 10 = 2
Reverse_Number=Remainder=1232
Число = 12/10 = 1
Остаток = 1% 10 = 1
Reverse_Number=Remainder=12321

Программа:

number = 12321
reverse_number = 0
n = number

# while we have not reached the end of the number
while n != 0:
    # finding the last element of number 'n'
    rem = n % 10
    reverse_number = reverse_number * 10 + rem
    n = int(n / 10)
    
if number == reverse_number:
    print("Palindrome")
else:
    print("Not a Palindrome")
Output-
Palindrome

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

number = 12321

# converting the number to string and then reversing it
if str(number)[::-1] == str(number):
    print("Number:", number, " is a Palindrome")
else:
    print("Number:", number, " is not a Palindrome")
Output-
Number: 12321 is a Palindrome

6. Проверка того, является ли фраза палиндромом в Python

Проверка, является ли фраза палиндромом или нет, отличается от проверки, является ли слово палиндромом или нет.
Например, фраза “Too hot to hoot” является палиндромом, если игнорировать верхний регистр – нижний регистр и пробелы в символах.

def is_palindrome(string):
    reversed_string = ""
    # Removing all the spaces
    s = string.replace(" ","")
    # making the whole string in lowercase characters 
    s = s.lower()
    for i in range(len(s), 0, -1):
        if s[i-1] >= 'a' and s[i-1] <= 'z':
            reversed_string += s[i - 1]
    if s == reversed_string:
        print("Palindrome")
    else:
        print("Not a palindrome")
        

if __name__ == '__main__':
    is_palindrome("Too hot to hoot")
    is_palindrome("Python")
Output-
Palindrome
Not a palindrome

Есть и другие типы палиндромов, например: “Is it crazy how saying sentences backward creates backward sentences saying how crazy it is”. Он отличается от других палиндромов, которые мы обсуждали до сих пор, потому что здесь, если мы перевернем символы, это не палиндром. Но если мы перевернем его слово за словом, то это будет палиндром.

Программа:

string = 'Is it crazy how saying sentences backwards creates backwards sentences saying how crazy it is'
string1 = string.lower()
string1 = string.replace(" ", "")
new_string = ""

# Wherever there is any space make a list element
list1 = string1.split(" ")

# join the list into string starting from the last
reverse = "".join(list1[::-1])
reverse_string = ""

for i in reverse:
    # adding only characters in the new string
    if i >= 'a' and i <= 'z': 
        reverse_string+=i 

for i in string1:
    if i >= 'a' and i <= 'z':
        new_string += i

if new_string == reverse_string:
    print(string, ":Palindrome")
else:
    print(string, ":Not a Palindrome")
Output-
Is it crazy how saying sentences backward creates backward sentences saying how crazy it is: Palindrome

7. Как найти самую длинную палиндромную подстроку в строке

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

m = ""
s = 'babad'

for i in range(len(s)):
    # iterating through the string from the last
    for j in range(len(s), i, -1):
    # ensuring that we do not iterate through more than half of 
    # the string
        if len(m) >= j-i:
            break
        elif s[i:j] == s[i:j][::-1]:
            m = s[i:j]

print(m)
Output-
bab

Алгоритмическая сложность для приведенной выше программы равна O(n^2), так как у нас есть цикл for внутри другого цикла for.

Читайте также:

Вывод

Мы изучили, что такое палиндром, как проверить, является ли строка или число палиндромом. Мы также рассмотрели некоторые распространенные вопросы интервью, такие как проверка фразы, если она является палиндромом, и поиск самой длинной подстроки, которая является палиндромом в Python. Я надеюсь, что вы попробуете каждое решение.