मान लीजिए हमारे पास एक स्ट्रिंग s है। हमें s का सबसे लंबा अच्छा सबस्ट्रिंग ढूंढना है। एक स्ट्रिंग s के लिए, इसे अच्छा कहा जाएगा जब, वर्णमाला के प्रत्येक अक्षर के लिए जो s में है, वह अपरकेस और लोअरकेस दोनों में दिखाई देता है। यदि ऐसे कई सबस्ट्रिंग हैं, तो सबसे पहले आने वाले सबस्ट्रिंग को वापस करें।
उदाहरण के लिए, यदि इनपुट s = "ZbybBbz" है, तो आउटपुट "bBb" होगा क्योंकि इसमें लोअरकेस और अपरकेस B दोनों हैं।
हल करने के चरण
cur_max := -1
res := खाली स्ट्रिंग
i को 0 से s के आकार तक की रेंज में लिए करें
c := s[i]
upper := एक नया सेट
lower := एक नया सेट
यदि c लोअरकेस में है, तो
c को lower में जोड़ें
यदि c अपरकेस में है, तो
c को लोअरकेस में बदलकर upper में जोड़ें
j को i+1 से s के आकार तक की रेंज में लिए करें
c := s[j]
यदि c लोअरकेस में है, तो
c को lower में जोड़ें
यदि c अपरकेस में है, तो
c को लोअरकेस में बदलकर upper में जोड़ें
यदि 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