ধরুন আমাদের একটি স্ট্রিং আছে; আমাদের সেই স্ট্রিং থেকে সমস্ত প্যালিনড্রোমিক সাব-স্ট্রিং খুঁজে বের করতে হবে। এখানে aa এবং aa দুটি উপ-স্ট্রিং হিসাবে বিবেচিত হয়, একটি নয়।
সুতরাং, ইনপুট যদি রিডিভাইডারের মত হয়, তাহলে আউটপুট হবে ['r', 'e', 'd', 'i', 'v', 'ivi', 'divid', 'edivide', 'redivider' , 'i', 'd', 'e', 'r']
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
- v :=একটি নতুন তালিকা
- pos :=0.0
- যখন pos
- rad :=pos - (পূর্ণ সংখ্যা হিসাবে pos)
- যদিও (pos + rad)
=0 এবং (s[(pos - rad)] এর পূর্ণসংখ্যা s[(pos + rad)] এর সমান), করবেন- v-এর শেষে s[(pos - rad) এর সূচক পূর্ণসংখ্যা থেকে (pos + rad + 1)] এর পূর্ণসংখ্যাতে ঢোকান
- rad :=rad + 1
- pos :=pos + 0.5
উদাহরণ কোড
আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -
def get_all_pal_sub(s): v = [] pos = 0.0 while pos < len(s): rad = pos - int(pos) while ((pos + rad) < len(s) and (pos - rad) >= 0 and (s[int(pos - rad)] == s[int(pos + rad)])): v.append(s[int(pos - rad): int(pos + rad + 1)]) rad += 1 pos += 0.5 return v v = get_all_pal_sub("redivider") print(len(v)) print(v)
ইনপুট
"redivider"
আউটপুট
13 ['r', 'e', 'd', 'i', 'v', 'ivi', 'divid', 'edivide', 'redivider', 'i', 'd', 'e', 'r']