मान लीजिए कि हमारे पास एक स्ट्रिंग है, हमें दो वर्णों को छोड़कर, दो समान अक्षरों या तत्वों के बीच सबसे लंबे समय तक सबस्ट्रिंग की लंबाई का पता लगाना है। अगर हमें ऐसा सबस्ट्रिंग नहीं मिल रहा है, तो -1 लौटें।
इसलिए, यदि इनपुट s ="स्तर" जैसा है, तो आउटपुट 3 होगा क्योंकि इष्टतम सबस्ट्रिंग या तो "लेव" या "वेल" हो सकते हैं।
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
-
ज्ञापन :=एक नया नक्शा
-
मैं के लिए 0 से s-1 के आकार की सीमा में, करो
-
अगर s[i] मेमो में है, तो
-
मेमो के अंत में i डालें[s[i]]
-
-
अन्यथा,
-
ज्ञापन [एस [i]]:=केवल एक तत्व के साथ एक सूची मैं
-
-
-
सर्वोत्तम:=0
-
मेमो में प्रत्येक कुंजी के लिए, करें
-
सर्वोत्तम:=अधिकतम सर्वोत्तम और (मेमो का अंतिम तत्व [कुंजी] - मेमो का पहला तत्व [कुंजी])
-
-
सर्वश्रेष्ठ वापसी - 1
उदाहरण (पायथन)
def solve(s): memo = {} for i in range(len(s)): if s[i] in memo: memo[s[i]].append(i) else: memo[s[i]] = [i] best = 0 for key in memo: best = max(best, memo[key][-1] - memo[key][0]) return best - 1 s = "level" print(solve(s))
इनपुट
"level"
आउटपुट
3