Винаги е интересно да се адресира проблем по различни начини, в тази кратка статия ще разрешим много елементарна и проста постановка на проблем, използвайки 5 различни подхода.
Изявление на проблема:
Напишете код, за да проверите дали даден низ е Palindrome или не. Палиндромът е поредица от знаци, която се чете както назад, така и напред.
Пример: „мадам“, „състезателна кола“, „хаха“ и др
Подход №1:
Този метод работи, като сравнява първата и последната буква от думата и продължава да се движи към центъра на думите.
Пример: В примера по-долу първият елемент е „1“, а последният елемент е „1“, които съвпадат, след което от левия показалец ще се премести напред към втория елемент, а отдясно ще се премести назад към предпоследния елемент, който също съвпадат, следователно под низа можем да разглеждаме като палиндром низ.
Код:
strs = "madam" #Setting the index of middle letter if len(strs)%2==0: mid = int(len(strs)/2)+1 else: mid = int(len(strs)/2) #Setting pointer to start from first and last element of word. first_start = 0 second_start = len(strs)-1 #Iterating n times which is length of word and stops the iteration #once pointers reach to middle of word then for i in range(len(strs)): if first_start==mid: print("it's Paliindrome") break if strs[first_start]==strs[second_start]: print(f"left element: {strs[first_start]}, right element: {strs[second_start]}") first_start+=1 second_start-=1 else: print("It's not Palindrome") break
Изход:
Подход №2:
Този подход е подобен на първия подход, но тук ще разделим низа от средата на два низа и след това ще сравним два низа, техниката на сравнение ще бъде същата като при първия подход.
Пример:
strs = "madam" mid = len(strs)//2 if len(strs)%2==0: first_half = strs[0:mid] second_half = strs[mid::] else: first_half = strs[0:mid+1] second_half = strs[mid::] print("First String: ",first_half ) print("Second String:",second_half) f_start = 0 s_start = len(first_half)-1 for i in range(len(first_half)): if first_half[f_start] == second_half[s_start]: f_start +=1 s_start-=1 else: print("its not palindrome") break if i == len(first_half)-1: print("it's palindrome")
Изход:
Подход №3:
Този подход разделя низа на две, вместо итерация като втори подход, ние ще сортираме и двата низа и ще направим директно сравнение.
Код:
mid = len(strs)//2 if len(strs)%2==0: first_half = strs[0:mid] second_half = strs[mid::] else: first_half = strs[0:mid+1] second_half = strs[mid::] first = ''.join(sorted(first_half)) second = ''.join(sorted(second_half)) print("First String:", first) print("Second String:",second) if first==second: print('its palindrome') else: print("it's not palindrome")
Изход:
Подход №4:
Това е много прост и ясен подход, без разделяне на низ, без итерация и т.н. Ние просто бихме обърнали низа и го сравнихме.
Код:
strs = "madam" reverse = ''.join(reversed(strs)) if strs == reverse: print("it's Palindrome") else: print("it's not Palindrome")
Изход:
Подход №5:
Последен и най-добър подход за проверка на Palindrome в python. Това може да се счита за Pythonic подход.
strs = "madam" if strs == strs[::-1]: print("It's Palindrome") else: print("It's not palindrome")
Изход: