मान लीजिए, हमें एक स्ट्रिंग 'input_str' दी गई है। यदि हम सभी प्रत्ययों को input_str से निर्धारित करते हैं; उदाहरण के लिए यदि स्ट्रिंग 'abcd' है, तो प्रत्यय 'abc', 'bcd', 'cd', 'd' हैं। अब, हम input_str और सभी प्रत्ययों के बीच की समानता की जाँच input_str और प्रत्यय में सबसे लंबे सामान्य उपसर्ग की लंबाई से करते हैं। input_str और सभी प्रत्ययों के बीच समानता का योग वापस करना होगा।
इसलिए, यदि इनपुट input_str ='tpotp' जैसा है, तो आउटपुट 7
. होगास्ट्रिंग 'tpotp' के सभी प्रत्यय 'tpotp', 'potp', 'otp', 'tp' और 'p' हैं।
अगर हम input_str के साथ सभी प्रत्ययों की समानता की जांच करते हैं, तो हमें -
. मिलता है'tpotp' similarity 5 'potp' similarity 0 'otp' similarity 0 'tp' similarity 2 'p' similarity 0 Sum of similarities = 5 + 0 + 0 + 2 + 0 = 7.
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
- return_list :=एक नई सूची जिसमें input_str का आकार शामिल है
- मैं :=1
- p :=0
- q :=0
- r :=0
- जबकि मैं
- यदि q
- अगर वापसी_सूची[i-q]>=q+p-i, तो
- r :=q + p - i
- p :=0
- q :=0
- अन्यथा,
- रिटर्न_लिस्ट [i-q] को रिटर्न_लिस्ट के अंत में डालें
- i :=i + 1
- r :=0
- यदि q
- जबकि (i + r
- r :=r + 1
उदाहरण
आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -
def solve(input_str): return_list = [len(input_str)] i = 1 p, q = 0,0 r = 0 while i < len(input_str): if q < i < (q+p): if return_list[i-q] >= q+p-i: r = q + p - i p, q = 0, 0 else: return_list.append(return_list[i-q]) i += 1 r = 0 else: while i + r < len(input_str) and input_str[r] == input_str[i+r]: r += 1 return_list.append(r) p,q = r,i i += 1 r = 0 return sum(return_list) print(solve('tpotp'))
इनपुट
'tpotp'
आउटपुट
5