Controlla se una stringa è palindroma in Java e Python

Nel corso degli anni, verificare se una stringa è un palindromo o meno è diventata una classica domanda da intervista di codifica. Questo perché implica concetti relativi alla manipolazione e al confronto delle stringhe e persino ai cicli a seconda dell'implementazione. E la domanda non è lunga, quindi può essere completata entro i limiti di tempo di un'intervista. Questo articolo include l'implementazione per verificare se una stringa è palindroma in Java e Python.

Cos'è un palindromo?

Secondo sinonimo.com, la definizione di palindromo è "una parola o una frase che si legge allo stesso modo all'indietro che in avanti". Fondamentalmente, significa che se scrivi la parola o la frase al contrario, sarà esattamente come quando era in avanti. Ad esempio, papà e mamma sono palindromi e padre e madre no. La parola "palindrome" deriva da due parole radice greche, "palin" che significa ancora e "dromos" che significa via o direzione. Fu coniato dal drammaturgo inglese Ben Jonson nel XVII secolo.

Soluzione

  • Il modo più comune e semplice per risolvere la domanda è invertire prima la stringa e poi confrontarla con la stringa originale. Questo approccio sarà O(n) nella notazione con O grande perché l'inversione di stringa è O(n).
  • Un altro modo sarebbe iniziare a confrontare i caratteri dall'inizio alla fine e continuare fino a raggiungere la metà. Questo approccio ha una complessità temporale di O(n/2) ma nella notazione con O grande sarà ancora O(n). Ma il vantaggio con questo approccio è che puoi restituire False non appena incontri la prima mancata corrispondenza, mentre con il primo approccio, poiché l'inversione di una stringa è il primo passo, la complessità temporale sarà sempre O(n).

Palindromo nell'implementazione di Python

Di seguito è riportato il codice per verificare se una stringa è palindroma in Python.

def is_palindrome(s): """Restituisce True se dato argomento s è un palindromo altrimenti False""" assert(isinstance(s,str)), "Argument s non è di tipo " # Conferma se l'argomento dato è di tipo return s[::-1]==s # Confronta il rovescio della stringa con se stesso if __name__=="__main__": print(is_palindrome("dad"))def is_palindrome(word): """Confronta i caratteri uno per uno dall'inizio e dalla fine e restituisce False quando si verifica la prima mancata corrispondenza oppure restituisce True""" i1,i2 = 0,len(parola)-1 # Inizializza i cursori while i2>i1: if parola[i1]!=parola[i2]: # Se i caratteri non corrispondono, non è necessario procedere ulteriormente return False i1+=1 i2-=1 return True if __name__=="__main__ ": print(is_palindrome("papà"))

Palindromo nell'implementazione di Java

Di seguito è riportato il codice per verificare se una stringa è palindroma in java.

public class Palindrome { public static Boolean isPalindrome(String str){ StringBuilder sb = new StringBuilder(str); // StringBuilder ha il metodo reverse return sb.reverse().toString().equals(str); // Confronta il contrario della stringa con se stessa } public static void main(String args[]) { Boolean b = isPalindrome("dad"); System.out.println(b); } }public class Palindrome { public static Boolean isPalindrome(String str){ int i1 = 0; int i2 = str.length() - 1; while(i2>i1){ if(str.charAt(i1)!=str.charAt(i2)){ return false; } i1++; i2--; } restituisce vero; } public static void main(String args[]) { Boolean b = isPalindrome("papà"); System.out.println(b); } }