Ελέγξτε εάν μια συμβολοσειρά είναι Palindrome σε Java και Python

Με την πάροδο των ετών, ο έλεγχος εάν μια συμβολοσειρά είναι παλινδρομή ή όχι έχει γίνει μια κλασική ερώτηση συνέντευξης κωδικοποίησης. Αυτό συμβαίνει επειδή περιλαμβάνει έννοιες γύρω από χειραγώγηση συμβολοσειρών και σύγκριση και ακόμη και βρόχους ανάλογα με την εφαρμογή. Και, η ερώτηση δεν είναι μακρά, ώστε να μπορεί να ολοκληρωθεί εντός των χρονικών περιορισμών μιας συνέντευξης. Αυτό το άρθρο περιλαμβάνει εφαρμογή για τον έλεγχο εάν μια συμβολοσειρά είναι παλινδρομήσει σε java και python.

Τι είναι το Palindrome;

Σύμφωνα με το synonym.com, ο ορισμός του palindrome είναι "μια λέξη ή φράση που διαβάζει το ίδιο προς τα πίσω με το εμπρός." Βασικά, σημαίνει ότι αν γράψετε τη λέξη ή τη φράση αντίστροφα, θα είναι ακριβώς το ίδιο όπως και όταν ήταν προς τα εμπρός. Για παράδειγμα, ο μπαμπάς και η μαμά είναι παλινδρόμια και ο πατέρας και η μητέρα δεν είναι. Η λέξη «palindrome» προέρχεται από δύο ελληνικές ρίζες λέξεις, «palin» που σημαίνει πάλι και «dromos» που σημαίνει τρόπο ή κατεύθυνση. Επινοήθηκε από τον Άγγλο θεατρικό συγγραφέα Ben Jonson τον 17ο αιώνα.

Λύση

  • Ο πιο συνηθισμένος και εύκολος τρόπος για να λύσετε την ερώτηση είναι να αντιστρέψετε πρώτα τη συμβολοσειρά και στη συνέχεια να τη συγκρίνετε με την αρχική συμβολοσειρά. Αυτή η προσέγγιση θα είναι O (n) στη σημείωση big-O επειδή η αντιστροφή συμβολοσειρών είναι O (n).
  • Ένας άλλος τρόπος θα ήταν να ξεκινήσετε τη σύγκριση χαρακτήρων από την αρχή και το τέλος και να συνεχίσετε μέχρι να φτάσετε στη μέση. Αυτή η προσέγγιση έχει μια χρονική πολυπλοκότητα του O (n / 2), αλλά στη σημείωση του μεγάλου O θα εξακολουθεί να είναι O (n) Αλλά το πλεονέκτημα με αυτήν την προσέγγιση είναι ότι μπορείτε να επιστρέψετε False μόλις συναντήσετε το πρώτο αναντιστοιχία, ενώ με την πρώτη προσέγγιση, καθώς η αντιστροφή μιας συμβολοσειράς είναι το πρώτο βήμα, η πολυπλοκότητα του χρόνου θα είναι πάντα O (n).

Palindrome στην εφαρμογή Python

Ακολουθεί ο κώδικας για τον έλεγχο εάν μια συμβολοσειρά είναι παλινδρομή στο python.

def is_palindrome (s): "" "Επιστρέφει αληθές εάν το όρισμα s είναι palindrome αλλιώς False" "" assert (isinstance (s, str)), "Το επιχείρημα δεν είναι τύπου Βεβαιωθείτε ότι το συγκεκριμένο όρισμα είναι τύπου return s [:: - 1] == s # Συγκρίνετε το αντίστροφο της συμβολοσειράς με το ίδιο εάν __name __ == "__ main__": print (is_palindrome ("dad")def is_palindrome (word): "" "Συγκρίνει τους χαρακτήρες ένας προς έναν από την αρχή και το τέλος και επιστρέφει False όταν εμφανιστεί η πρώτη αναντιστοιχία ή αλλιώς επιστρέφει True" "" i1, i2 = 0, len (word) -1 # Initialize οι δρομείς ενώ i2> i1: if word [i1]! = word [i2]: # Εάν οι χαρακτήρες δεν ταιριάζουν, δεν χρειάζεται να προχωρήσουμε περαιτέρω επιστροφή False i1 + = 1 i2- = 1 return True αν __name __ == "__ main__ ": print (is_palindrome (" μπαμπάς "))

Palindrome στην εφαρμογή Java

Ακολουθεί ο κώδικας για τον έλεγχο εάν μια συμβολοσειρά είναι παλινδρομήσει σε java.

δημόσια τάξη Palindrome {public static Boolean isPalindrome (String str) {StringBuilder sb = new StringBuilder (str); // Το StringBuilder έχει αντίστροφη μέθοδο επιστροφής sb.reverse (). ToString (). Ισούται με (str); // Συγκρίνετε το αντίστροφο της συμβολοσειράς με το ίδιο} δημόσιο κενό στατικού κενού (String args []) {Boolean b = isPalindrome ("μπαμπάς"); System.out.println (b); }}δημόσια τάξη Palindrome {public static Boolean isPalindrome (String str) {int i1 = 0; int i2 = str.length () - 1; ενώ (i2> i1) {if (str.charAt (i1)! = str.charAt (i2)) {επιστροφή false; } i1 ++; i2--; } επιστροφή αληθινή; } δημόσιος στατικός κενός κενός (String args []) {Boolean b = isPalindrome ("μπαμπάς"); System.out.println (b); }}