मान लीजिए कि हमारे पास एक स्ट्रिंग है जो हमें सबसे लंबे संभव सबस्ट्रिंग को वापस करना है जिसमें अद्वितीय वर्णों की संख्या k है, यदि सबसे लंबी संभव लंबाई के एक से अधिक सबस्ट्रिंग हैं, तो उनमें से किसी को वापस कर दें।
इसलिए, यदि इनपुट s ="ppqprqtqtqt", k =3 जैसा है, तो आउटपुट rqtqtqt होगा क्योंकि इसकी लंबाई 7 है।
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
-
एन:=26
-
एक फ़ंक्शन परिभाषित करें is_ok() । यह गिनती लेगा, k
-
वैल:=0
-
मेरे लिए 0 से N की सीमा में, करें
-
अगर गिनती [i]> 0, तो
-
वैल:=वैल + 1
-
-
-
सही लौटें जब (k>=वैल)
-
मुख्य विधि से, निम्न कार्य करें -
-
अद्वितीय :=0, आकार :=s का आकार
-
गिनती :=आकार N की एक सरणी, 0 से भरें
-
मेरे लिए 0 से आकार की सीमा में, ऐसा करें
-
यदि s[i] की संख्या 0 के समान है, तो
-
अद्वितीय:=अद्वितीय + 1
-
-
s[i] की संख्या को 1 से बढ़ाएं
-
-
अगर अद्वितीय
-
ऐसा कोई वर्ण और निकास नहीं है
-
-
प्रारंभ:=0, अंत:=0
-
window_length :=1, window_start :=0
-
गिनती :=आकार N की एक सरणी, 0 से भरें
-
s[0] की संख्या में 1 तक वृद्धि करें
-
1 से आकार के बीच के लिए, करें
-
s[i] की संख्या को 1 से बढ़ाएं
-
अंत:=अंत + 1
-
जबकि is_ok(गिनती, k) गलत है, करें
-
s[i] की संख्या को 1 से कम करें
-
प्रारंभ:=प्रारंभ + 1
-
-
अगर एंड-स्टार्ट+1> window_length, तो
-
window_length :=एंड-स्टार्ट+1
-
window_start :=start
-
-
-
s का रिटर्न सबस्ट्रिंग [इंडेक्स विंडो_स्टार्ट से विंडो_स्टार्ट + विंडो_लेंथ]
उदाहरण
आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -
N = 26
def is_ok(count, k):
val = 0
for i in range(N):
if count[i] > 0:
val += 1
return (k >= val)
def k_unique_chars(s, k):
unique = 0
size = len(s)
count = [0] * N
for i in range(size):
if count[ord(s[i])-ord('a')] == 0:
unique += 1
count[ord(s[i])-ord('a')] += 1
if unique < k:
return "Not sufficient characters"
start = 0
end = 0
window_length = 1
window_start = 0
count = [0] * len(count)
count[ord(s[0])-ord('a')] += 1
for i in range(1,size):
count[ord(s[i])-ord('a')] += 1
end+=1
while not is_ok(count, k):
count[ord(s[start])-ord('a')] -= 1
start += 1
if end-start+1 > window_length:
window_length = end-start+1
window_start = start
return s[window_start:window_start + window_length]
s = "ppqprqtqtqt"
k = 3
print(k_unique_chars(s, k)) इनपुट
"ppqprqtqtqt", 3
आउटपुट
rqtqtqt