Comment vérifier le numéro de palindrome en Python ?
Publié: 2020-11-30Table des matières
Qu'est-ce qu'un palindrome ?
Un palindrome est un mot, un nombre ou toute chaîne de caractères qui se lit de la même manière vers l'arrière que vers l'avant.
Quelques exemples : detartrate, 1567651, 02/02/2020, Malayalam
Cet article vous montre donc différentes façons d'écrire un programme pour vérifier si une entrée donnée est un palindrome ou non, en utilisant Python.
Méthode 1 :
La solution la plus naïve qui vient à l'esprit est d'inverser le nombre et de vérifier s'il est égal au nombre d'entrée. Cela peut être fait comme suit :
nombre = int (entrée ());
inverse = 0
tant que nombre > 0 :
chiffre = nombre % 10
inverse = inverse * 10 + chiffre
nombre = nombre // 10
si nombre==inverse :
print("c'est un palindrome!")
autre:
print("ce n'est pas un palindrome!")
Cependant, cela compromet la lisibilité du code et comporte plus de lignes de code que nécessaire. Consultez notre cours en ligne sur la science des données pour en savoir plus.
Voici une manière courte et agréable de vérifier un nombre en utilisant une seule ligne.
Méthode 2 :
L'astuce consiste à prendre le nombre d'entrée comme un type de données str au lieu de int. Ensuite, vous pouvez utiliser la technique de découpage [::-1] pour obtenir l'inverse d'une chaîne et vérifier l'égalité dans l' instruction if elle-même.
nombre = entrée()
si nombre == nombre[::-1] :
print("c'est un palindrome!")
autre:
print("ce n'est pas un palindrome!")
Méthode 3 :
Il s'agit d'une méthode récursive pour vérifier si un tableau est un palindrome ou non.
def isPalindrome(nombres, début, fin):
si début >= fin :
retourner Vrai
si nombres[début] == nombres[fin] :
return isPalindrome(chiffres, début + 1, fin – 1)
autre:
retourner Faux
nombres=liste(map(int, input().split()))
n=len(nombres)
si estPalindrome(nombres, 0, n-1):
print("c'est un palindrome!")
autre:
print("ce n'est pas un palindrome!")
La fonction isPalindrome vérifie si les premier et dernier éléments du tableau sont identiques ou non. Si ce n'est pas le cas, la fonction renvoie immédiatement False. Sinon, il vérifie récursivement les éléments extrêmes suivants jusqu'à ce que les deux pointeurs se rencontrent au milieu.
Lire : Idées et sujets de projet Python
Questions d'entrevue de codage courantes liées aux palindromes
#1 Sous-chaîne palindromique la plus longue
Étant donné une seule chaîne en entrée, vous devez renvoyer la longueur de la plus longue sous-chaîne palindromique de la chaîne.
Par exemple:
Entrée : 'acbcbabcc'
Sortie : 5 ('cbabc')
Approcher:
Si nous essayons de relier cela à l'un des problèmes les plus courants de DP, la sous-chaîne commune la plus longue, ici la différence est que nous ne recevons qu'une seule chaîne d'entrée alors que LCS utilise deux chaînes. Puisque nous savons qu'un palindrome est exactement égal à son inverse, nous pouvons faire de la deuxième chaîne l'inverse de notre entrée donnée.
Maintenant, cela devient exactement la même chose que de trouver LCS.
def LCSubstr(A, B, m, n):
LCSub = [[0 pour i dans la plage (n+1)] pour j dans la plage (m+1)]
répond = 0
pour i dans la plage (m+1):
pour j dans la plage (n+1) :
si (i == 0 ou j == 0):
LCSub[i][j] = 0
elif A[i-1] == B[j-1] :
LCSub[i][j] = 1 + LCSub[i-1][j-1]

ans = max(ans, LCSub[i][j])
autre:
LCSub[i][j] = 0
retour et
str1 = entrée()
chaîne2 = chaîne1[::-1]
m = len(str1)
n = len(str2)
print('Longueur de la plus longue sous-chaîne palindromique = ', LCSubstring(str1, str2, m, n))
Donc, pour l'entrée ci-dessus, nous obtenons les deux chaînes comme
'acbcbabcc' et
'ccbabcbca'
La sous-chaîne commune la plus longue devient 'cbabc' qui est de longueur 5.
#2 Vérifier si une anagramme d'une chaîne est un palindrome
Étant donné une chaîne en entrée, vous devez vérifier si un anagramme de la chaîne peut être un palindrome ou non et renvoyer oui/non en conséquence.
Par exemple:
Entrée : 'pythonpython'
Sortie : Oui
(alors que la chaîne elle-même n'est pas un palindrome, un possible anagramme 'pythonnohtyp' forme un palindrome)
Entrée : 'harrypotter'
Sortie : Non
Approcher:
Si vous remarquez attentivement, chaque fois que nous avons une chaîne palindrome de longueur paire, tous les caractères de la première moitié sont répétés dans la seconde moitié. Cela signifie que tous les caractères présents dans la chaîne apparaissent un nombre pair de fois.
Lorsque la longueur est impaire, tous les caractères à gauche de l'élément du milieu (non inclus) apparaissent le même nombre de fois dans la partie droite de l'élément du milieu. Cela signifie qu'il n'y a qu'un seul caractère qui apparaît un nombre impair de fois (élément du milieu) et tous les autres apparaissent un nombre pair de fois.
En utilisant cette logique, nous pouvons stocker le nombre de caractères de la chaîne dans un hachage et vérifier ces contraintes pour obtenir la réponse requise.
CHAR_RANGE = 256
str1 = entrée()
freq = [0 pour i dans la plage (CHAR_RANGE)]
pour moi dans str1 :
freq[ord(i)] += 1 #ord(x) donne la valeur unicode de x
nombre_odds = 0
pour je dans la plage (CHAR_RANGE):
si fréq[i] & 1 :
num_odds += 1
si (num_odds > 1) :
imprimer("Oui")
autre:
imprimer("Non")
Conclusion
En conclusion, les problèmes de palindrome sont très courants et intéressants. Ils sont utiles pour résoudre diverses énigmes mathématiques et questions de programmation compétitives.
Si vous êtes curieux d'en savoir plus sur la science des données, consultez le programme Executive PG en science des données de IIIT-B & upGrad qui est créé pour les professionnels en activité et propose plus de 10 études de cas et projets, des ateliers pratiques, un mentorat avec des experts de l'industrie, 1 -on-1 avec des mentors de l'industrie, plus de 400 heures d'apprentissage et d'aide à l'emploi avec les meilleures entreprises.
Quelle est la complexité temporelle du programme Palindrome ?
Le nombre d'opérations élémentaires effectuées par la méthode est souvent utilisé pour estimer la complexité temporelle, en supposant que chaque processus élémentaire prend un certain temps pour s'achever. La complexité temporelle pour déterminer si un nombre est un palindrome ou non est O(log10 (n)). Lorsque nous vérifions que les valeurs sont un palindrome, nous divisons le nombre ou la valeur par dix à chaque itération. Par conséquent, la complexité temporelle est égale au nombre de chiffres dans un nombre.
En quoi l'opérateur / est-il différent de // en Python ?
Lorsque nous utilisons l'opérateur de division, c'est-à-dire une seule barre oblique (/) en Python, le compilateur divise simplement les deux valeurs sur les côtés droit et gauche de la barre oblique. Mais lorsque nous utilisons une double barre oblique (//), c'est-à-dire une division par étage, nous demandons au compilateur d'effectuer le processus de division typique, mais le résultat obtenu est le plus grand entier possible proche de la réponse. Cet entier est inférieur ou égal au résultat de la division normale.
Quel est le salaire d'entrée de gamme d'un développeur Python ?
C'est un fait bien connu que Python est largement utilisé dans la plupart des industries et des entreprises, ce qui fait de Python le deuxième langage informatique le mieux payé. Python est également le langage de programmation préféré des étudiants et des professionnels car il est facile à apprendre et très flexible. Le salaire d'entrée de gamme d'un développeur Python en Inde est d'environ 4 27 293 INR par an en moyenne. Les professionnels qui apprennent Python ont une grande portée car Python est également utilisé dans d'autres domaines tels que la science des données et l'apprentissage automatique.