একটি স্ট্রিং s দেওয়া আছে। s-এর সর্বোচ্চ দৈর্ঘ্যের "নাইস" সাবস্ট্রিং বের করতে হবে। একটি স্ট্রিং "নাইস" হবে যদি সেটিতে থাকা প্রতিটি বর্ণ বড় হাত এবং ছোট হাত উভয় রূপে উপস্থিত থাকে। একাধিক হলে সবচেয়ে আগে আসা সাবস্ট্রিং ফেরত দিন।
যেমন, s = "ZbybBbz" হলে আউটপুট "bBb"। কারণ এতে 'b' এবং 'B' দুটি রূপেই আছে।
সমাধানের ধাপসমূহ
- cur_max := -1, res := ""
- i = 0 থেকে s-এর দৈর্ঘ্য পর্যন্ত লুপ:
- c := s[i], upper := set(), lower := set()
- যদি c ছোট হাত হয়, তবে lower-এ যোগ করুন।
- যদি c বড় হাত হয়, তবে upper-এ c.lower() যোগ করুন।
- j = i+1 থেকে s-এর দৈর্ঘ্য পর্যন্ত লুপ:
- c := s[j], upper/lower সেট আপডেট করুন।
- যদি upper == lower হয় এবং j-i > cur_max হয়, তবে cur_max := j-i, res := s[i:j+1]
- res ফেরত দিন।
উদাহরণ
def solve(s):
cur_max = -1
res = ""
for i in range(len(s)):
c = s[i]
upper = set()
lower = set()
if c.islower():
lower.add(c)
if c.isupper():
upper.add(c.lower())
for j in range(i+1, len(s)):
c = s[j]
if c.islower():
lower.add(c)
if c.isupper():
upper.add(c.lower())
if upper == lower:
if j - i > cur_max:
cur_max = j - i
res = s[i:j+1]
return res
s = "ZbybBbz"
print(solve(s))
ইনপুট
"ZbybBbz"
আউটপুট
bBb