मान लीजिए हमारे पास एक लोअरकेस स्ट्रिंग s है। हमें यह जांचना है कि क्या हम अधिकतम 1 वर्ण हटाकर s को एक वैध स्ट्रिंग में बदल सकते हैं। यहां वैध स्ट्रिंग का अर्थ है एक स्ट्रिंग str जहां str के सभी अद्वितीय वर्णों की आवृत्ति समान हो।
उदाहरण के लिए, यदि इनपुट s = "xyyzx" है, तो आउटपुट True होगा क्योंकि हम 'z' को हटा सकते हैं तब स्ट्रिंग "xyyx" होगी जहां x और y की घटनाएं समान हैं।
समाधान दृष्टिकोण
हम प्रत्येक वर्ण की आवृत्ति गिनते हैं, फिर जांचते हैं कि क्या अधिकतम दो अलग-अलग आवृत्तियां हैं और क्या उनमें से एक को एक वर्ण हटाकर समायोजित किया जा सकता है।
एल्गोरिदम चरण:
- आकार 26 का
occurrenceऐरे बनाएं (प्रत्येक लोअरकेस अक्षर के लिए) - स्ट्रिंग के प्रत्येक वर्ण की आवृत्ति गिनें
- पहली गैर-शून्य आवृत्ति
occr1और उसकी गिनतीoccr1_cntढूंढें - दूसरी अलग आवृत्ति
occr2और उसकी गिनतीoccr2_cntढूंढें - शेष सभी गैर-शून्य आवृत्तियों के लिए जांचें कि वे
occr1याoccr2के बराबर हैं - यदि
occr1_cnt > 1औरoccr2_cnt > 1, तो False लौटाएं - True लौटाएं
पायथन कार्यान्वयन
def solve(s):
size = 26
occurrence = [0] * size
for ch in s:
occurrence[ord(ch) - ord('a')] += 1
# पहली गैर-शून्य आवृत्ति ढूंढें
occr1 = 0
occr1_cnt = 0
for i in range(size):
if occurrence[i] != 0:
occr1 = occurrence[i]
occr1_cnt = 1
break
# दूसरी अलग आवृत्ति ढूंढें
occr2 = 0
occr2_cnt = 0
for j in range(i + 1, size):
if occurrence[j] != 0:
if occurrence[j] == occr1:
occr1_cnt += 1
else:
occr2_cnt = 1
occr2 = occurrence[j]
break
# शेष आवृत्तियों की जांच करें
for k in range(j + 1, size):
if occurrence[k] != 0:
if occurrence[k] == occr1:
occr1_cnt += 1
elif occurrence[k] == occr2:
occr2_cnt += 1
else:
return False
if occr1_cnt > 1 and occr2_cnt > 1:
return False
return True
s = "xyyzx"
print(solve(s)) # True
इनपुट
"xyyzx"
आउटपुट
True
व्याख्या:
"xyyzx" में आवृत्तियां: x=2, y=2, z=1
- आवृत्ति 2: दो अक्षर (x, y)
- आवृत्ति 1: एक अक्षर (z)
z को हटाने पर (आवृत्ति 1 वाला अक्षर), सभी की आवृत्ति 2 हो जाती है। वैध!