Come controllare il numero di palindromo in Python?
Pubblicato: 2020-11-30Sommario
Cos'è un palindromo?
Un palindromo è una parola, un numero o qualsiasi stringa di caratteri che legge lo stesso all'indietro mentre legge in avanti.
Alcuni esempi: detartrato, 1567651, 02/02/2020, Malayalam
Quindi questo articolo mostra vari modi in cui puoi scrivere un programma per verificare se un dato input è palindromo o meno, usando Python.
Metodo 1:
La soluzione più ingenua che viene in mente è invertire il numero e verificare se è uguale al numero immesso. Si può fare come segue:
numero = int(input());
inverso = 0
mentre numero > 0:
cifra = numero % 10
inverso = inverso * 10 + cifra
numero = numero // 10
se numero==inverso:
print("è un palindromo!")
altro:
print(“non è palindromo!”)
Tuttavia, ciò compromette la leggibilità del codice e ha più righe di codice del necessario. Dai un'occhiata al nostro corso di scienza dei dati online per saperne di più.
Ecco un modo breve e dolce per controllare un numero usando solo una riga.
Metodo 2:
Il trucco è prendere il numero di input come tipo di dati str invece di int. Quindi puoi utilizzare la tecnica di slicing [::-1] per ottenere il rovescio di una stringa e verificare l'uguaglianza nell'istruzione if stessa.
numero = input()
se numero == numero[::-1]:
print("è un palindromo!")
altro:
print(“non è palindromo!”)
Metodo 3:
Questo è un metodo ricorsivo per verificare se un array è palindromo o meno.
def isPalindrome(numeri, inizio, fine):
se inizio >= fine:
restituisce Vero
se numeri[inizio] == numeri[fine]:
return isPalindrome(numeri, inizio + 1, fine – 1)
altro:
restituire Falso
numeri= lista(map(int, input().split()))
n=len(numeri)
if isPalindrome(numeri, 0, n-1):
print("è un palindromo!")
altro:
print(“non è palindromo!”)
La funzione isPalindrome controlla se il primo e l'ultimo elemento dell'array sono uguali o meno. In caso contrario, la funzione restituisce immediatamente False. Altrimenti controlla ricorsivamente gli elementi estremi successivi fino a quando i due puntatori non si incontrano nel mezzo.
Leggi: Idee e argomenti del progetto Python
Domande di intervista di codifica comuni relative ai palindromi
# 1 Sottostringa palindromica più lunga
Data una sola stringa come input, devi restituire la lunghezza della sottostringa palindromica più lunga nella stringa.
Per esempio:
Input: 'acbcbabcc'
Uscita: 5 ("cbabc")
Approccio:
Se proviamo a mettere in relazione questo con uno dei problemi più comuni di DP, la sottostringa comune più lunga, qui la differenza è che ci viene data solo una stringa di input mentre LCS usa due stringhe. Poiché sappiamo che un palindromo è esattamente uguale al suo rovescio, possiamo fare della seconda stringa l'inverso del nostro dato input.
Ora questo diventa esattamente lo stesso che trovare LCS.
def LCSubstr(A, B, m, n):
LCSub = [[0 per i nell'intervallo(n+1)] per j nell'intervallo(m+1)]
ans = 0
per i nella gamma (m+1):
per j nell'intervallo(n+1):
se (i == 0 o 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])
altro:
LCSub[i][j] = 0
ritorno ans
str1 = input()
str2 = str1[::-1]
m = len(str1)
n = len(str2)
print('Lunghezza della sottostringa palindromica più lunga = ', LCSubstring(str1, str2, m, n))
Quindi per l'input sopra, otteniamo le due stringhe come
'acbcbabcc' e
'ccbabcbca'
La sottostringa comune più lunga diventa 'cbabc' che è di lunghezza 5.
# 2 Controlla se un anagramma di una stringa è un palindromo
Data una stringa come input, devi controllare se qualsiasi anagramma della stringa può essere un palindromo o meno e restituire sì/no di conseguenza.
Per esempio:
Input: 'pythonpython'
Uscita: Sì
(sebbene la stringa stessa non sia un palindromo, un possibile anagramma 'pythonnohtyp' forma un palindromo)
Input: 'harrypotter'
Uscita: n
Approccio:
Se fai attenzione, ogni volta che abbiamo una stringa palindroma di lunghezza pari, tutti i caratteri della prima metà vengono ripetuti nella seconda metà. Ciò significa che tutti i caratteri presenti nella stringa ricorrono un numero pari di volte.
Quando la lunghezza è dispari, tutti i caratteri a sinistra dell'elemento centrale (non inclusi) ricorrono lo stesso numero di volte sul lato destro dell'elemento centrale. Ciò significa che esiste un solo carattere che ricorre un numero dispari di volte (elemento centrale) e tutti gli altri ricorrono un numero pari di volte.
Usando questa logica, possiamo memorizzare il conteggio dei caratteri nella stringa in un hash e verificare la presenza di questi vincoli per ottenere la risposta richiesta.
CHAR_RANGE = 256
str1 = input()
freq = [0 per i nell'intervallo (CHAR_RANGE)]
per io in str1:
freq[ord(i)] += 1 #ord(x) fornisce il valore unicode di x
num_odds = 0
per i nell'intervallo (CHAR_RANGE):
se freq[i] e 1:
num_quote += 1
se (num_odds > 1):
stampa ("Sì")
altro:
stampa ("No")
Conclusione
In conclusione, i problemi palindromi sono molto comuni e interessanti. Sono utili per risolvere vari enigmi matematici e domande di programmazione competitiva.
Se sei curioso di conoscere la scienza dei dati, dai un'occhiata al programma Executive PG in Data Science di IIIT-B e upGrad, creato per i professionisti che lavorano e offre oltre 10 casi di studio e progetti, workshop pratici pratici, tutoraggio con esperti del settore, 1 -on-1 con mentori del settore, oltre 400 ore di apprendimento e assistenza al lavoro con le migliori aziende.
Qual è la complessità temporale del programma Palindrome?
Il numero di operazioni elementari eseguite dal metodo viene spesso utilizzato per stimare la complessità temporale, assumendo che ogni processo elementare richieda un determinato periodo di tempo per essere completato. La complessità temporale per determinare se un numero è o meno un palindromo è O(log10 (n)). Quando controlliamo che i valori siano palindromi, dividiamo il numero o il valore per dieci in ogni iterazione. Di conseguenza, la complessità temporale è uguale al numero di cifre in un numero.
In che modo / è diverso dall'operatore // in Python?
Quando usiamo l'operatore divide, cioè una singola barra (/) in Python, il compilatore divide semplicemente i due valori sui lati destro e sinistro della barra. Ma quando usiamo la doppia barra(//), cioè la divisione del pavimento, chiediamo al compilatore di eseguire il tipico processo di divisione, ma il risultato che produce è il più grande intero possibile vicino alla risposta. Questo numero intero è inferiore o uguale al risultato della divisione normale.
Qual è lo stipendio base di uno sviluppatore Python?
È risaputo che Python è ampiamente utilizzato nella maggior parte dei settori e delle aziende, rendendo Python il secondo linguaggio informatico più pagato. Python è anche il linguaggio di programmazione preferito da studenti e professionisti perché è facile da imparare ed è altamente flessibile. Lo stipendio base di uno sviluppatore Python in India è in media di circa INR 4.27.293 all'anno. I professionisti che apprendono Python hanno molte possibilità poiché Python viene utilizzato anche in altri campi come Data Science e Machine Learning.