ধরুন আমাদের একটি স্ট্রিং s আছে, আমাদের দুটি অক্ষর বাদ দিয়ে দুটি সমান অক্ষর বা উপাদানের মধ্যে দীর্ঘতম সাবস্ট্রিংয়ের দৈর্ঘ্য খুঁজে বের করতে হবে। যদি আমরা এই ধরনের সাবস্ট্রিং খুঁজে না পাই, তাহলে -1 ফেরত দিন।
সুতরাং, যদি ইনপুট s ="লেভেল" এর মত হয়, তাহলে আউটপুট হবে 3 কারণ সর্বোত্তম সাবস্ট্রিং হয় "লেভ" বা "ভেল" হতে পারে।
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
-
মেমো :=একটি নতুন মানচিত্র
-
i এর জন্য 0 থেকে s - 1 এর আকারের মধ্যে, করুন
-
যদি s[i] মেমোতে থাকে, তাহলে
-
মেমো[s[i]]
এর শেষে i ঢোকান
-
-
অন্যথায়,
-
memo[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