মনে করুন আমাদের কাছে একটি টেক্সট আছে। আমাদের সর্বোচ্চ সম্ভাব্য k বের করতে হবে যাতে a[1], a[2], ..., a[k] অস্তিত্ব থাকে যাতে: প্রতিটি a[i] একটি নন-ব্ল্যাঙ্ক স্ট্রিং। এবং তাদের কনক্যাটেনেশন a[1] + a[2] + ... + a[k] দেওয়া টেক্সটের সমান। 1 থেকে k রেঞ্জের সব i-এর জন্য, a[i] = a[{k+1 - i}]।
সুতরাং, যদি ইনপুট হয় text = "antaprezatepzapreanta", তবে আউটপুট হবে 11 কারণ আমরা এটিকে এভাবে ভাগ করতে পারি "a|nt|a|pre|za|tpe|za|pre|a|nt|a"।
এটি সমাধান করতে আমরা নিচের ধাপগুলো অনুসরণ করব −
counter := 0
i := 1, j := text-এর আকার - 1
ic := 0, jc := text-এর আকার
যতক্ষণ i <= j, করুন
যদি text[ic থেকে i-1] সাবস্ট্রিং text[j থেকে jc-1] সাবস্ট্রিং-এর সমান হয়, তবে
counter := counter + 2
ic := i
jc := j
i := i + 1
j := j - 1
যদি ic != jc হয়, তবে
counter := counter + 1
counter রিটার্ন করুন
উদাহরণ
বेहतर বোঝার জন্য নিচের ইমপ্লিমেন্টেশন দেখুন
def solve(text):
counter = 0
i, j = 1, len(text) - 1
ic, jc = 0, len(text)
while i <= j:
if text[ic:i] == text[j:jc]:
counter += 2
ic = i
jc = j
i += 1
j -= 1
if ic != jc:
counter += 1
return counter
text = "antaprezatepzapreanta"
print(solve(text))
ইনপুট
[3,4,5,2,1,7,3,4,7], 3
আউটপুট
11