Patikrinkite, ar „Java“ ir „Python“ eilutė yra „Palindrome“

Per daugelį metų tikrinimas, ar eilutė yra palindromas, ar ne, tapo klasikiniu interviu koduojančiu klausimu. Taip yra todėl, kad tai apima sąvokas, susijusias su eilučių manipuliavimu ir palyginimu, ir netgi kilpas, priklausomai nuo įgyvendinimo. Klausimas nėra ilgas, todėl jį galima atsakyti per interviu laiką. Šiame straipsnyje pateikiama, kaip patikrinti, ar „Java“ ir „Python“ eilutės yra palindrominės.

Kas yra palindromas?

Kaip rašo synonym.com, palindromo apibrėžimas yra „žodis ar frazė, skaitantys tą patį atgal, kaip ir į priekį“. Iš esmės tai reiškia, kad jei žodį ar frazę parašysite atvirkščiai, jis bus visiškai toks pat, kaip ir tada, kai jis buvo į priekį. Pavyzdžiui, tėtis ir mama yra palindromai, o tėvas ir mama - ne. Žodis „palindromas“ kilęs iš dviejų graikiškų šaknies žodžių „palin“, reiškiančio dar kartą, ir „dromos“, reiškiančio kelią ar kryptį. XVII amžiuje jį sukūrė anglų dramaturgas Benas Jonsonas.

Sprendimas

  • Labiausiai paplitęs ir paprastas būdas išspręsti klausimą yra pirmiausia pakeisti eilutę ir tada palyginti ją su pradine eilute. Šis metodas bus O (n) didžiosios O žymėjime, nes eilutės pakeitimas yra O (n).
  • Kitas būdas būtų pradėti simbolių palyginimą nuo pradžios ir pabaigos ir tęsti tol, kol pasieksite vidurį. Šis metodas turi O (n / 2) laiko sudėtingumą, tačiau didžiosios O žymėjime jis vis tiek bus O (n). Tačiau šio metodo pranašumas yra tas, kad galite grąžinti „False“, kai tik susiduriate su pirmu neatitikimu, tuo tarpu su pirmuoju požiūriu, nes eilutės pakeitimas yra pirmas žingsnis, laiko sudėtingumas visada bus O (n).

„Palindrome“ įgyvendinant „Python“

Toliau pateikiamas kodas, skirtas patikrinti, ar „Python“ eilutė yra palindrominė.

def is_palindrome (s): "" "Grąžina tiesą, jei pateiktas argumentas s yra palindromas, o kitas" False "teiginys (isinstance (s, str))," Argumentas s nėra tipo "# Tvirtinkite, jei nurodytas argumentas yra tipo grąžinti s [:: - 1] == s # Palyginkite eilutės atvirkštinę dalį su savimi, jei __name __ == "__ main__": print (is_palindrome ("tėtis"))def is_palindrome (word): "" "Palygina simbolius po vieną nuo pradžios ir pabaigos ir grąžina False, kai įvyksta pirmasis neatitikimas, arba grąžinama True" "" i1, i2 = 0, len (word) -1 # Initialize žymekliai, o i2> i1: jei žodis [i1]! = žodis [i2]: # Jei simboliai nesutampa, nereikia tęsti toliau. Grąžinti klaidingą i1 + = 1 i2- = 1 grąžinti tiesą, jei __pavadinimas __ == "__ main__ ": print (is_palindrome (" tėtis "))

„Palindrome“ diegiant „Java“

Toliau pateikiamas kodas, skirtas patikrinti, ar „Java“ eilutė yra palindrominė.

public class Palindrome {public static Boolean isPalindrome (String str) {StringBuilder sb = naujas StringBuilder (str); // StringBuilder turi atvirkštinį metodą return sb.reverse (). ToString (). Equals (str); // Palyginkite eilutės atvirkštinę dalį su savimi} public static void main (String args []) {Boolean b = isPalindrome ("tėtis"); System.out.println (b); }}public class Palindrome {public static Boolean isPalindrome (String str) {int i1 = 0; int i2 = str. ilgis () - 1; while (i2> i1) {if (str.charAt (i1)! = str.charAt (i2)) {grąžina klaidingą; } i1 ++; i2--; } return true; } public static void main (String args []) {Boolean b = isPalindrome ("tėtis"); System.out.println (b); }}