Überprüfen Sie, ob ein String in Java und Python ein Palindrom ist

Im Laufe der Jahre hat sich die Überprüfung, ob ein String ein Palindrom ist oder nicht, zu einer klassischen Frage im Codierungsinterview entwickelt. Dies liegt daran, dass es Konzepte rund um die Manipulation und den Vergleich von Zeichenfolgen und je nach Implementierung sogar Schleifen umfasst. Und die Frage ist nicht lang, so dass sie innerhalb der Zeitbeschränkungen eines Interviews beantwortet werden kann. Dieser Artikel enthält eine Implementierung zum Überprüfen, ob eine Zeichenfolge in Java und Python ein Palindrom ist.

Was ist ein Palindrom?

Laut synonym.com ist die Definition von Palindrom "ein Wort oder eine Phrase, die sich rückwärts wie vorwärts gleich liest." Im Grunde bedeutet dies, dass, wenn Sie das Wort oder den Satz rückwärts schreiben, es genau so ist, wie wenn es vorwärts war. Zum Beispiel sind Papa und Mama Palindrome und Vater und Mutter sind es nicht. Das Wort "Palindrom" kommt von zwei griechischen Wurzelwörtern, "palin" bedeutet wieder und "dromos" bedeutet Weg oder Richtung. Es wurde im 17. Jahrhundert von dem englischen Dramatiker Ben Jonson geprägt.

Lösung

  • Die häufigste und einfachste Möglichkeit, die Frage zu lösen, besteht darin, die Zeichenfolge zuerst umzukehren und sie dann mit der ursprünglichen Zeichenfolge zu vergleichen. Dieser Ansatz ist O(n) in Big-O-Notation, da die Zeichenfolgenumkehr O(n) ist.
  • Eine andere Möglichkeit wäre, die Zeichen von Anfang und Ende zu vergleichen und bis zur Mitte fortzufahren. Dieser Ansatz hat eine Zeitkomplexität von O(n/2), aber in Big-O-Notation wird es immer noch O(n) sein. Der Vorteil bei diesem Ansatz besteht jedoch darin, dass Sie False zurückgeben können, sobald Sie auf die erste Abweichung stoßen, während beim ersten Ansatz die Zeitkomplexität immer O(n) ist, da das Umkehren einer Zeichenfolge der erste Schritt ist.

Palindrom in Python-Implementierung

Es folgt der Code zum Überprüfen, ob eine Zeichenfolge in Python ein Palindrom ist.

def is_palindrome(s): """Gibt True zurück, wenn das angegebene Argument s ein Palindrom ist, sonst False""" assert(isinstance(s,str)), "Argument s ist nicht vom Typ " # Bestätige, ob das angegebene Argument vom Typ ist return s[::-1]==s # Vergleiche die Rückseite des Strings mit sich selbst if __name__=="__main__": print(is_palindrome("dad"))def is_palindrome(word): """Vergleicht die Zeichen einzeln von Anfang und Ende und gibt False zurück, wenn die erste Abweichung auftritt, oder gibt sonst True zurück""" i1,i2 = 0,len(word)-1 # Initialize die Cursor während i2>i1: if word[i1]!=word[i2]: # Wenn die Zeichen nicht übereinstimmen, muss nicht weiter fortgefahren werden false i1+=1 i2-=1 return True if __name__=="__main__ ": print(is_palindrome("Papa"))

Palindrom in Java-Implementierung

Es folgt der Code zum Überprüfen, ob ein String in Java ein Palindrom ist.

public class Palindrome { public static Boolean isPalindrome(String str){ StringBuilder sb = new StringBuilder(str); // StringBuilder hat eine umgekehrte Methode return sb.reverse().toString().equals(str); // Vergleiche die Rückseite des Strings mit sich selbst } 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.Länge() - 1; while(i2>i1){ if(str.charAt(i1)!=str.charAt(i2)){ return false; } i1++; i2--; } true zurückgeben; } public static void main(String args[]) { Boolean b = isPalindrome("Dad"); System.out.println(b); } }