ধরুন আমাদের দুটি স্ট্রিং আছে a এবং b যার দৈর্ঘ্য একই। আমাদের একটি সূচক নির্বাচন করতে হবে এবং সেই নির্বাচিত সূচকে উভয় স্ট্রিংকে বিভক্ত করতে হবে, একটিকে দুটি স্ট্রিংয়ে বিভক্ত করতে হবে:a_pref এবং a_suff যেখানে a =a_pref | a_suff, এবং b কে দুটি স্ট্রিংয়ে বিভক্ত করা:b_pref | b_suff (| হল কনক্যাটেনেশন অপারেটর) যেখানে b =b_pref + b_suff। a_pref + b_suff বা b_pref + a_suff একটি প্যালিনড্রোম গঠন করে কিনা তা পরীক্ষা করুন। (যেকোনো বিভাজন একটি খালি স্ট্রিং হতে পারে)
সুতরাং, যদি ইনপুটটি a ="pqrst" b ="turqp" এর মতো হয়, তবে আউটপুটটি True হবে কারণ আমরা একটি লাইক ["pq", "rst"] এবং b এর মতো ["tu", "rqp" ভাগ করতে পারি। ], তাই যদি আমরা b_suff এর সাথে a_pref যোগ করি, তাহলে আমরা "pqrqp" পাব যা একটি প্যালিনড্রোম।
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
-
জোড়ার তালিকা থেকে প্রতিটি জোড়ার জন্য (x, y) [(a, b), (b, a)], do
-
i :=0, j :=x - 1
এর আকার -
যখন x[i] y[j] এবং i
0 এর আকারের সমান, do -
i :=i + 1
-
j :=j - 1
-
-
midx :=সূচী i থেকে j
পর্যন্ত x এর সাবস্ট্রিং -
midy :=সূচক i থেকে j
পর্যন্ত y এর সাবস্ট্রিং -
যদি মিডএক্স প্যালিনড্রোম হয় বা মিডি প্যালিনড্রোম হয়, তাহলে
-
রিটার্ন ট্রু
-
-
-
রিটার্ন ফলস
উদাহরণ
আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -
def solve(a, b): for x, y in [[a, b], [b, a]]: i, j = 0, len(x) - 1 while x[i] == y[j] and i<len(x) and j>0: i += 1 j -= 1 midx = x[i:j+1] midy = y[i:j+1] if (midx == midx[::-1] or midy== midy[::-1]): return True return False a = "pqrst" b = "turqp" print(solve(a, b))
ইনপুট
"pqrst", "turqp"
আউটপুট
True