I årenes løb er det blevet et klassisk kodningsspørgsmål om at kontrollere, om en streng er en palindrom eller ej. Dette skyldes, at det involverer koncepter omkring strengmanipulation og sammenligning og endda sløjfer afhængigt af implementeringen. Og spørgsmålet er ikke langvarigt, så det kan afsluttes inden for tidsbegrænsningerne for et interview. Denne artikel inkluderer implementering til kontrol af, om en streng er palindrom i java og python.
Hvad er en palindrom?
Ifølge synonym.com er definitionen af palindrom "et ord eller en sætning, der læser det samme bagud som fremad." Dybest set betyder det, at hvis du skriver ordet eller sætningen i omvendt retning, vil det være nøjagtigt det samme som når det var fremad. For eksempel er far og mor palindromer, og far og mor ikke. Ordet "palindrom" kommer fra to græske rodord, "palin", der betyder igen og "dromos", der betyder vej eller retning. Det blev opfundet af den engelske dramatiker Ben Jonson i det 17. århundrede.
Opløsning
- Den mest almindelige og nemme måde at løse spørgsmålet på er at vende strengen først og derefter sammenligne den med den originale streng. Denne tilgang vil være O (n) i stor-O notation, fordi strengreversering er O (n).
- En anden måde ville være at begynde at sammenligne tegn fra start og slut og fortsætte, indtil du når midten. Denne tilgang har en tidskompleksitet på O (n / 2), men i stor-O notation vil den stadig være O (n). Men fordelen med denne tilgang er, at du kan returnere Falsk, så snart du støder på den første mismatch, mens med den første tilgang, da reversering af en streng er det første trin, vil tidskompleksiteten altid være O (n).
Palindrom i Python-implementering
Følgende er koden til kontrol af, om en streng er palindrom i python.
def is_palindrome (s): "" "Returnerer sandt, hvis givet argument s er et palindrom, ellers Falsk" "" påstand (isinstance (s, str)), "Argument s er ikke af typen "# Påstå, om det givne argument er af typen returner s [:: - 1] == s # Sammenlign bagsiden af strengen med sig selv hvis __navn __ == "__ main__": print (is_palindrome ("dad"))
def is_palindrome (word): "" "Sammenligner tegnene en efter en fra begyndelsen og slutningen og returnerer Falsk, når den første uoverensstemmelse opstår ellers returnerer Sand" "" i1, i2 = 0, len (ord) -1 # Initialiser markørerne, mens i2> i1: hvis ord [i1]! = ord [i2]: # Hvis tegnene ikke stemmer overens, er der ikke behov for at fortsætte yderligere returnering Falsk i1 + = 1 i2- = 1 retur Sand hvis __navn __ == "__ main__ ": print (is_palindrome (" far "))
Palindrome i Java-implementering
Følgende er koden til kontrol af, om en streng er palindrom i java.
public class Palindrome {public static Boolean isPalindrome (String str) {StringBuilder sb = new StringBuilder (str); // StringBuilder har reverse metode return sb.reverse (). ToString (). Er lig med (str); // Sammenlign bagsiden af strengen med sig selv} offentlig statisk ugyldig 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ængde () - 1; mens (i2> i1) {hvis (str.charAt (i1)! = str.charAt (i2)) {returner false; } i1 ++; i2--; } returner sandt } offentlig statisk ugyldig hoved (String args []) {Boolean b = isPalindrome ("dad"); System.out.println (b); }}