Винаги е интересно да се адресира проблем по различни начини, в тази кратка статия ще разрешим много елементарна и проста постановка на проблем, използвайки 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")

Изход: