पाठ 30 / 42
Sliding Window
अनुक्रम पर चलती खिड़की बनाए रखें, एक पास में इसे बढ़ाएँ और घटाएँ।
दाएँ बढ़ाएँ, बाएँ घटाएँ
"सबसे लंबा/छोटा/सर्वश्रेष्ठ सन्निहित subarray या substring" समस्याओं के लिए: नया तत्व शामिल करने को right हिलाएँ; जब तक खिड़की बाधा तोड़े, तत्व हटाने को left हिलाएँ। हर इंडेक्स एक बार आता-जाता है — O(n)।
बिना दोहराव सबसे लंबा substring
हर वर्ण का अंतिम इंडेक्स ट्रैक करें; किसी दोहराव से आगे left कूदें।
def longest_unique(s):
last = {}
left = best = 0
for right, c in enumerate(s):
if c in last and last[c] >= left:
left = last[c] + 1
last[c] = right
best = max(best, right - left + 1)
return best
Output:
longest_unique("abcabcbb") -> 3 ("abc")इसे पहचानना
कीवर्ड: "सन्निहित", "subarray/substring", "अधिकतम K", "योग बराबर", "सबसे लंबा/छोटा"। निश्चित-आकार खिड़की और भी सरल — एक से सरकाएँ और चलती राशि समायोजित करें।