मान लीजिए हमारे पास एक टेक्स्ट है। हमें सबसे बड़ा संभव 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 := टेक्स्ट का आकार - 1
ic := 0, jc := टेक्स्ट का आकार
जब तक i <= j, तब तक:
यदि टेक्स्ट का उपस्ट्रिंग [ic से i-1] टेक्स्ट के उपस्ट्रिंग [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