मान लीजिए हमारे पास एक टेक्स्ट है। हमें सबसे बड़ा संभव k ढूंढना है जैसे कि a[1], a[2], ..., a[k] मौजूद हों जैसे कि: प्रत्येक a[i] एक गैर-खाली स्ट्रिंग है; उनका संयोजन a[1] + a[2] + ... + a[k] दिए गए टेक्स्ट के बराबर है; 1 से k की रेंज में सभी i के लिए, a[i] = a[k+1-i]।
उदाहरण के लिए, यदि इनपुट "antaprezatepzapreanta" है, तो आउटपुट 11 होगा, क्योंकि हम इसे "(a)(nt)(a)(pre)(za)(tpe)(za)(pre)(a)(nt)(a)" की तरह विभाजित कर सकते हैं।
हल करने के चरण
- start := 0, end := टेक्स्ट की लंबाई - 1
- temp1 और temp2 को खाली स्ट्रिंग से इनिशियलाइज़ करें
- ans = 1 यदि टेक्स्ट की लंबाई विषम है, अन्यथा 0
- जब तक start < end:
- temp1 := temp1 + text[start]
- temp2 := text[end] + temp2
- यदि temp1, temp2 के बराबर है, तो:
- temp1 और temp2 को खाली स्ट्रिंग सेट करें
- ans := ans + 2
- start := start + 1
- end := end - 1
- यदि टेक्स्ट की लंबाई सम है और (temp1 या temp2 खाली नहीं है):
- ans := ans + 1
- ans वापस करें
उदाहरण
class Solution(object):
def longestDecomposition(self, text):
start = 0
end = len(text) - 1
temp1 = ""
temp2 = ""
ans = 1 if len(text) & 1 else 0
while start < end:
temp1 += text[start]
temp2 = text[end] + temp2
if temp1 == temp2:
temp1 = temp2 = ""
ans += 2
start += 1
end -= 1
if len(text) % 2 == 0 and (temp1 or temp2):
ans += 1
return ans
ob = Solution()
print(ob.longestDecomposition("antaprezatepzapreanta"))
इनपुट
"antaprezatepzapreanta"
आउटपुट
11