In de loop der jaren is het controleren of een string een palindroom is of niet een klassieke coderingsinterviewvraag geworden. Dit komt omdat het concepten betreft rond het manipuleren en vergelijken van strings en zelfs lussen, afhankelijk van de implementatie. En de vraag is niet lang en kan dus binnen de tijdslimiet van een interview worden beantwoord. Dit artikel bevat implementatie voor het controleren of een string palindroom is in Java en Python.
Wat is een palindroom?
Volgens synoniem.com is de definitie van palindroom "een woord of zin die achterstevoren hetzelfde leest als vooruit". Kort gezegd betekent dit dat als u het woord of de zin omgekeerd schrijft, het precies hetzelfde zal zijn als toen het vooruit was. Vader en moeder zijn bijvoorbeeld palindromen en vader en moeder niet. Het woord "palindroom" komt van twee Griekse grondwoorden, "palin" wat opnieuw betekent en "dromos" wat weg of richting betekent. Het werd bedacht door de Engelse toneelschrijver Ben Jonson in de 17e eeuw.
Oplossing
- De meest gebruikelijke en gemakkelijke manier om de vraag op te lossen, is door de string eerst om te draaien en deze vervolgens te vergelijken met de originele string. Deze benadering is O(n) in big-O-notatie omdat stringomkering O(n) is.
- Een andere manier zou zijn om karakters van begin en einde te vergelijken en door te gaan totdat je het midden bereikt. Deze benadering heeft een tijdcomplexiteit van O(n/2), maar in big-O-notatie zal het nog steeds O(n) zijn. Maar het voordeel van deze benadering is dat je False kunt retourneren zodra je de eerste mismatch tegenkomt, terwijl bij de eerste benadering, aangezien het omkeren van een string de eerste stap is, de tijdcomplexiteit altijd O(n) zal zijn.
Palindroom in Python-implementatie
Hieronder volgt de code om te controleren of een string palindroom is in python.
def is_palindrome(s): """Retourneert True als gegeven argument s een palindroom is else False""" assert(isinstance(s,str)), "Argument s is niet van het type " # Bevestig als het gegeven argument van het type is return s[::-1]==s # Vergelijk het omgekeerde van string met zichzelf if __name__=="__main__": print(is_palindrome("dad"))
def is_palindrome(word): """Vergelijkt de tekens één voor één van begin en einde en retourneert False wanneer de eerste mismatch optreedt of geeft anders True terug""" i1,i2 = 0,len(word)-1 # Initialize de cursors while i2>i1: if word[i1]!=word[i2]: # Als de karakters niet overeenkomen, hoeft u niet verder te gaan return False i1+=1 i2-=1 return True if __name__=="__main__ ": print(is_palindrome("papa"))
Palindroom in Java-implementatie
Hieronder volgt de code om te controleren of een string een palindroom is in Java.
public class Palindrome {public static Boolean isPalindrome(String str){ StringBuilder sb = new StringBuilder(str); // StringBuilder heeft een omgekeerde methode retour sb.reverse().toString().equals(str); // Vergelijk het omgekeerde van de string met zichzelf } public static void main (String args []) { Boolean b = isPalindrome("dad"); Systeem.uit.println(b); } }
public class Palindrome { public static Boolean isPalindrome (String str) {int i1 = 0; int i2 = str.lengte() - 1; while(i2>i1){ if(str.charAt(i1)!=str.charAt(i2)){ return false; } i1++; i2--; } retourneer waar; } public static void main(String args[]) { Boolean b = isPalindrome("dad"); Systeem.uit.println(b); } }