Cum se verifică numărul palindrom în Python?
Publicat: 2020-11-30Cuprins
Ce este un palindrom?
Un palindrom este un cuvânt, un număr sau orice șir de caractere care se citește la fel în spate ca și înainte.
Câteva exemple: detartrat, 1567651, 02.02.2020, malayalam
Deci, acest articol vă arată diferite moduri în care puteți scrie un program pentru a verifica dacă o anumită intrare este un palindrom sau nu, folosind Python.
Metoda 1:
Cea mai naivă soluție care îmi vine în minte este să inversezi numărul și să verifici dacă este egal cu numărul introdus. Se poate face astfel:
număr = int(input());
invers = 0
în timp ce numărul > 0:
cifră = număr % 10
revers = invers * 10 + cifra
număr = număr // 10
dacă numărul==invers:
print(„este un palindrom!”)
altceva:
print(„nu este un palindrom!”)
Cu toate acestea, acest lucru compromite lizibilitatea codului și are mai multe linii de cod decât este necesar. Consultați cursul nostru online de știință a datelor pentru a afla mai multe.
Iată o modalitate scurtă și dulce de a verifica un număr folosind doar o singură linie.
Metoda 2:
Trucul este să luați numărul de intrare ca tip de date str în loc de int. Apoi puteți utiliza tehnica de tăiere [::-1] pentru a obține reversul unui șir și pentru a verifica egalitatea în instrucțiunea if în sine.
număr = input()
dacă număr == număr[::-1]:
print(„este un palindrom!”)
altceva:
print(„nu este un palindrom!”)
Metoda 3:
Aceasta este o metodă recursivă pentru a verifica dacă o matrice este un palindrom sau nu.
def isPalindrom (numere, început, sfârșit):
dacă start >= end:
returnează Adevărat
dacă numere[început] == numere[sfârșit]:
returnare estePalindrom (numere, început + 1, sfârșit – 1)
altceva:
return False
numere= listă(hartă(int, input().split()))
n=len(numere)
dacă estePalindrom (numere, 0, n-1):
print(„este un palindrom!”)
altceva:
print(„nu este un palindrom!”)
Funcția isPalindrome verifică dacă primul și ultimul element al matricei sunt identice sau nu. Dacă nu, funcția returnează imediat False. În caz contrar, verifică recursiv următoarele elemente extreme până când cele două indicatori se întâlnesc la mijloc.
Citiți: Idei și subiecte pentru proiecte Python
Întrebări comune de interviu de codificare legate de palindrom
#1 Cel mai lung subșir palindromic
Având doar un șir ca intrare, trebuie să returnați lungimea celui mai lung subșir palindromic din șir.
De exemplu:
Intrare: „acbcbabcc”
Ieșire: 5 ('cbabc')
Abordare:
Dacă încercăm să relaționăm acest lucru cu una dintre cele mai comune probleme ale DP, cel mai lung subșir comun, aici diferența este că ni se oferă un singur șir de intrare, în timp ce LCS folosește două șiruri. Deoarece știm că un palindrom este exact egal cu reversul său, putem face ca al doilea șir ca reversul intrării noastre date.
Acum, aceasta devine exact la fel cu găsirea LCS.
def LCSubstr(A, B, m, n):
LCSub = [[0 pentru i în interval (n+1)] pentru j în interval (m+1)]
răspuns = 0
pentru i în domeniul (m+1):
pentru j în interval (n+1):
dacă (i == 0 sau 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])
altceva:
LCSub[i][j] = 0
intoarce ans
str1 = input()
str2 = str1[::-1]
m = len(str1)
n = len(str2)
print('Lungimea celui mai lung subșir palindromic = ', LCSubstring(str1, str2, m, n))
Deci, pentru intrarea de mai sus, obținem cele două șiruri ca
„acbcbabcc” și
'ccbabcbca'
Cel mai lung subșir comun devine „cbabc”, care are lungimea 5.
# 2 Verificați dacă o anagramă a unui șir este un palindrom
Având un șir ca intrare, trebuie să verificați dacă vreo anagramă a șirului poate fi un palindrom sau nu și să returnați da/nu în consecință.
De exemplu:
Intrare: „pythonpython”
Ieșire: Da
(în timp ce șirul în sine nu este un palindrom, o posibilă anagramă „pythonnohtyp” formează un palindrom)
Intrare: „harrypotter”
Ieșire: Nu
Abordare:
Dacă observați cu atenție, ori de câte ori avem un șir palindrom de lungime egală, toate caracterele din prima jumătate se repetă în a doua jumătate. Aceasta înseamnă că toate caracterele prezente în șir apar de un număr par de ori.
Când lungimea este impară, toate caracterele din stânga elementului din mijloc (nu inclusiv) apar de același număr de ori în partea dreaptă a elementului din mijloc. Aceasta înseamnă că există un singur caracter care apare de un număr impar de ori (elementul mijlociu) și toate celelalte apar de un număr par.
Folosind această logică, putem stoca numărul de caractere din șir într-un hash și putem verifica aceste constrângeri pentru a obține răspunsul necesar.
CHAR_RANGE = 256
str1 = input()
frecvență = [0 pentru i în interval (CHAR_RANGE)]
pentru i în str1:
frecvență[ord(i)] += 1 #ord(x) oferă valoarea unicode a lui x
num_odds = 0
pentru i în interval (CHAR_RANGE):
dacă frecvența[i] și 1:
num_odds += 1
dacă (num_odds > 1):
print(„Da”)
altceva:
print(„Nu”)
Concluzie
În concluzie, problemele palindromului sunt foarte frecvente și interesante. Sunt utile pentru a rezolva diverse puzzle-uri matematice și întrebări de programare competitivă.
Dacă sunteți curios să aflați despre știința datelor, consultați programul Executive PG în știința datelor de la IIIT-B și upGrad, care este creat pentru profesioniști care lucrează și oferă peste 10 studii de caz și proiecte, ateliere practice practice, mentorat cu experți din industrie, 1 -on-1 cu mentori din industrie, peste 400 de ore de învățare și asistență profesională cu firme de top.
Care este complexitatea de timp a programului Palindrom?
Numărul de operații elementare efectuate prin metodă este adesea folosit pentru a estima complexitatea timpului, presupunând că fiecare proces elementar necesită o anumită perioadă de timp pentru a fi finalizat. Complexitatea de timp pentru a determina dacă un număr este sau nu un palindrom este O(log10 (n)). Când verificăm ca valorile să fie un palindrom, împărțim numărul sau valoarea la zece în fiecare iterație. Ca urmare, complexitatea temporală este egală cu numărul de cifre dintr-un număr.
Cum este / diferit de // operator în Python?
Când folosim operatorul de împărțire, adică o singură bară oblică (/) în Python, compilatorul împarte pur și simplu cele două valori din partea dreaptă și stângă a barei oblice. Dar când folosim dublă oblică(//), adică împărțirea la etaj, cerem compilatorului să efectueze procesul tipic de împărțire, dar rezultatul pe care îl obține este cel mai mare număr întreg posibil aproape de răspuns. Acest număr întreg este fie mai mic, fie egal cu rezultatul divizării normale.
Care este salariul la nivel de intrare al unui dezvoltator Python?
Este un fapt binecunoscut că Python este utilizat pe scară largă în majoritatea industriilor și companiilor, ceea ce face ca Python să fie al doilea cel mai bine plătit limbaj de calcul. Python este, de asemenea, limbajul de programare preferat printre studenți și profesioniști, deoarece este ușor de învățat și este extrem de flexibil. Salariul de bază al unui dezvoltator Python în India este în medie de aproximativ 4.27.293 INR pe an. Profesioniștii care învață Python au o mulțime de domenii, deoarece Python este folosit și în alte domenii, cum ar fi Data Science și Machine Learning.