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