С течение на годините проверката дали низът е палиндром или не се превърна в класически въпрос за интервю за кодиране. Това е така, защото включва концепции за манипулация и сравнение на низове и дори цикли в зависимост от изпълнението. И въпросът не е дълъг, така че може да бъде завършен в рамките на времевите ограничения на интервю. Тази статия включва изпълнение за проверка дали низът е палиндром в java и python.
Какво е палиндром?
Според synonym.com определението за палиндром е „дума или фраза, която се чете същото назад като напред“. По принцип това означава, че ако напишете думата или фразата в обратна посока, тя ще бъде абсолютно същата, както когато е била изпратена напред. Например баща и майка са палиндроми, а баща и майка не. Думата "палиндром" идва от две гръцки коренни думи, "palin", което означава отново и "dromos", което означава начин или посока. То е измислено от английския драматург Бен Джонсън през 17 век.
Решение
- Най-често срещаният и лесен начин за решаване на въпроса е като обърнете първо низа и след това го сравните с оригиналния низ. Този подход ще бъде O (n) в нотация на big-O, тъй като обръщането на низовете е O (n).
- Друг начин би бил да започнете да сравнявате символите от началото и края и да продължите, докато стигнете до средата. Този подход има времева сложност на O (n / 2), но в нотация с големи O все още ще бъде O (n). Но предимството при този подход е, че можете да върнете False веднага щом попаднете на първото несъответствие, докато при първия подход, тъй като обръщането на низ е първата стъпка, сложността на времето винаги ще бъде O (n).
Палиндром в изпълнението на Python
Следва кодът за проверка дали низът е палиндром в python.
def is_palindrome (s): "" "Връща True, ако даден аргумент s е палиндром, иначе False" "" твърди (isinstance (s, str)), "Аргументът не е от тип "# Потвърдете дали даденият аргумент е от тип return s [:: - 1] == s # Сравнете обратното на низ със себе си, ако __name __ == "__ main__": print (is_palindrome ("dad"))
def is_palindrome (дума): "" "Сравнява символите един по един от началото и края и връща False, когато настъпи първото несъответствие или иначе връща True" "" i1, i2 = 0, len (дума) -1 # Инициализиране курсорите докато i2> i1: ако дума [i1]! = дума [i2]: # Ако символите не съвпадат, няма нужда да продължите по-нататък връщане False i1 + = 1 i2- = 1 връщане Вярно, ако __name __ == "__ main__ ": print (is_palindrome (" баща "))
Palindrome в изпълнението на Java
Следва кодът за проверка дали низът е палиндром в Java.
публичен клас Palindrome {публичен статичен Boolean isPalindrome (String str) {StringBuilder sb = new StringBuilder (str); // StringBuilder има обратен метод return sb.reverse (). ToString (). Equals (str); // Сравнете обратната страна на низа със себе си} public static void main (String args []) {Boolean b = isPalindrome ("dad"); System.out.println (b); }}
публичен клас Palindrome {публичен статичен булев isPalindrome (String str) {int i1 = 0; int i2 = str.length () - 1; while (i2> i1) {if (str.charAt (i1)! = str.charAt (i2)) {return false; } i1 ++; i2--; } return true; } публична статична void main (String args []) {Boolean b = isPalindrome ("dad"); System.out.println (b); }}