Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> Python

Python में वर्ण आवृत्ति को अद्वितीय बनाने के लिए न्यूनतम डिलीशन गिनने का प्रोग्राम


मान लीजिए हमारे पास एक स्ट्रिंग s है, s को अच्छा कहा जाता है यदि s में कोई दो अलग-अलग वर्ण नहीं हैं जिनकी आवृत्ति समान हो। हमें s को एक अच्छी स्ट्रिंग बनाने के लिए हटाने के लिए आवश्यक वर्णों की न्यूनतम संख्या ढूंढनी है।

उदाहरण के लिए, यदि इनपुट है s = "ssstttuu", तो आउटपुट 2 होगा क्योंकि यदि हम एक 't' हटाते हैं, तो तीन 's', दो 't' और दो 'u' होंगे, फिर से एक हटाएं, या तो 't' या 'u', उन्हें अच्छा बनाने के लिए।

समाधान के चरण

  1. val := Counter(s) (s के प्रत्येक वर्ण की आवृत्ति वाला मैप)
  2. res := 0
  3. numlist := sorted(val.values())
  4. i को 0 से len(numlist)-2 तक:
    • यदि numlist[i] नॉन-ज़ीरो है और numlist[i] == numlist[i+1]:
      • numlist[i] := numlist[i] - 1
      • res := res + 1
      • k := i-1
      • m := i
      • while numlist[m] and numlist[m] == numlist[k]:
        • numlist[k] := numlist[k] - 1
        • k := k - 1
        • m := m - 1
        • res := res + 1
  5. 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
  1. - पायथन में दो ऐरे का योग बराबर करने के लिए न्यूनतम ऑपरेशन ढूंढना

    मान लीजिए हमारे पास दो लिस्ट nums1 और nums2 हैं जहां दोनों लिस्ट में प्रत्येक तत्व रेंज 1 से 6 में है। अब एक ऑपरेशन पर विचार करें जिसके द्वारा, हम nums1 या nums2 से एक संख्या चुन सकते हैं और उसके मान को 1 से 6 के बीच की संख्या में अपडेट कर सकते हैं। हमें न्यूनतम ऑपरेशन की संख्या ढूंढनी है ताकि इन द

  1. - Python में स्ट्रिंग को सॉर्ट करने के लिए न्यूनतम ऑपरेशन ज्ञात करें

    एक स्ट्रिंग s दी गई है। निम्न ऑपरेशन दोहराएं जब तक स्ट्रिंग सॉर्ट न हो जाए: सबसे बड़ा इंडेक्स i ढूंढें जहां 1 ≤ i < len(s) और s[i] < s[i-1] सबसे बड़ा इंडेक्स j ढूंढें जहां i ≤ j < len(s) और सभी k ∈ [i, j] के लिए s[k] < s[i-1] s[i-1] और s[j] को स्वैप करें सफिक्स i से अंत तक रिवर्स करें यह वास्तव मे

  1. Python में सभी अलग-अलग कोर्स कवर करने के लिए न्यूनतम सेमेस्टर गिनने का प्रोग्राम Python में सभी अलग-अलग कोर्स कवर करने के लिए न्यूनतम सेमेस्टर गिनने का प्रोग्राम

    मान लीजिए हमारे पास एक संख्या n है, जो दर्शाती है कि 1 से n तक लेबल किए गए n अलग-अलग कोर्स हैं। हमारे पास एक ऐरे relations भी है जहां relations[i] में एक जोड़ी (prevCourse_i, nextCourse_i) होती है, जो कोर्स prevCourse_i और कोर्स nextCourse_i के बीच एक पूर्वापेक्षा संबंध को दर्शाती है: यानी कोर्स pr