Автор оригинала: Team Python Pool.
Один из самых простых и часто задаваемых вопросов на интервью – проверить, является ли строка палиндромом или нет, используя Python.
Палиндром – это строка или число, которое, если повернуть вспять, равно исходному значению. Например, если мы перевернем строку MALAYALAM, мы получим обратно исходную строку. Кроме того, если мы перевернем число 12321, мы получим 12321 обратно. Они известны как палиндромы.
В этой статье мы узнаем, как проверить, является ли строка или число палиндромом или нет, разными способами. В дополнение к этому мы решим некоторые вопросы болельщиков, которые обычно задаются на соревнованиях и интервью.
В этой статье мы узнаем, как проверить, является ли строка или число палиндромом, различными способами. В дополнение к этому мы решим несколько интересных вопросов, которые обычно задаются в конкурсах и интервью.
Проверка того, является ли строка палиндромом в Python
- Проверьте Палиндром с помощью нарезки (slicing) в Python
- Проверьте Палиндром с помощью функции reversed() В Python
- Проверьте Палиндром с помощью цикла while в Python
- Проверка того, является ли число палиндромом в Python с помощью цикла
- Проверка того, является ли фраза палиндромом в Python
- Как найти самую длинную палиндромную подстроку в строке
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.
Читайте также:
- Как преобразовать строку в нижний регистр
- Как вычислить Квадратный корень
- Пользовательский ввод | Функция input() | Ввод с клавиатуры
Вывод
Мы изучили, что такое палиндром, как проверить, является ли строка или число палиндромом. Мы также рассмотрели некоторые распространенные вопросы интервью, такие как проверка фразы, если она является палиндромом, и поиск самой длинной подстроки, которая является палиндромом в Python. Я надеюсь, что вы попробуете каждое решение.