मान लीजिए हमारे पास एक स्ट्रिंग s है, s को अच्छा कहा जाता है यदि s में कोई दो अलग-अलग वर्ण नहीं हैं जिनकी आवृत्ति समान हो। हमें s को एक अच्छी स्ट्रिंग बनाने के लिए हटाने के लिए आवश्यक वर्णों की न्यूनतम संख्या ढूंढनी है।
उदाहरण के लिए, यदि इनपुट है s = "ssstttuu", तो आउटपुट 2 होगा क्योंकि यदि हम एक 't' हटाते हैं, तो तीन 's', दो 't' और दो 'u' होंगे, फिर से एक हटाएं, या तो 't' या 'u', उन्हें अच्छा बनाने के लिए।
समाधान के चरण
val := Counter(s)(sके प्रत्येक वर्ण की आवृत्ति वाला मैप)res := 0numlist := sorted(val.values())iको 0 सेlen(numlist)-2तक:- यदि
numlist[i]नॉन-ज़ीरो है औरnumlist[i] == numlist[i+1]:numlist[i] := numlist[i] - 1res := res + 1k := i-1m := iwhile numlist[m] and numlist[m] == numlist[k]:numlist[k] := numlist[k] - 1k := k - 1m := m - 1res := res + 1
- यदि
resवापस करें
उदाहरण
बेहतर समझ के लिए निम्नलिखित कार्यान्वयन देखें:
from collections import Counter
def solve(s):
val = Counter(s)
res = 0
numlist = sorted([i for i in val.values()])
for i in range(len(numlist)-1):
if numlist[i] and numlist[i] == numlist[i+1]:
numlist[i] -= 1
res += 1
k = i-1
m = i
while numlist[m] and numlist[m] == numlist[k]:
numlist[k] -= 1
k -= 1
m -= 1
res += 1
return res
s = "ssstttuu"
print(solve(s))
इनपुट
"ssstttuu"
आउटपुट
2