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

Python में स्ट्रिंग को आधा मोनोटोनस बनाने के लिए आवश्यक अपडेट की संख्या खोजें

मान लीजिए हमारे पास एक लोअरकेस स्ट्रिंग s है जिसकी लंबाई सम है। हमें उन वर्णों की न्यूनतम संख्या ज्ञात करनी है जिन्हें अपडेट करने की आवश्यकता है ताकि निम्न तीन शर्तों में से एक सभी i के लिए पूरी हो, जहां 0 ≤ i < n/2 और j, n/2 ≤ j < n:

  • s[i] > s[j]
  • s[i] < s[j]
  • s[i] == s[j]

इसलिए, यदि इनपुट s = "pppxxp" है, तो आउटपुट 1 होगा क्योंकि यदि हम अंतिम "p" को "x" में बदलते हैं, तो यह शर्त s[i] < s[j] को संतुष्ट कर सकता है।

हल करने का दृष्टिकोण

  • n := s का आकार
  • left := s के बाएं आधे भाग के प्रत्येक वर्ण की आवृत्तियों वाला शब्दकोश
  • right := s के दाएं आधे भाग के प्रत्येक वर्ण की आवृत्तियों वाला शब्दकोश
  • ans := n
  • लोअरकेस अंग्रेजी अक्षरों में प्रत्येक वर्ण pivot के लिए, करें:
    • ans := ans और (n - left[pivot] - right[pivot]) का न्यूनतम
    • good := left[c] में मौजूद सभी तत्वों का योग जहां c <= pivot
    • good := good + right[c] में मौजूद सभी तत्वों का योग जहां c > pivot
    • ans := ans और (n - good) का न्यूनतम
    • good := left[c] में मौजूद सभी तत्वों का योग जहां c > pivot
    • good := good + right[c] में मौजूद सभी तत्वों का योग जहां c <= pivot
    • ans := ans और (n - good) का न्यूनतम
  • ans लौटाएं

उदाहरण

from collections import Counter
from string import ascii_lowercase

def solve(s):
    n = len(s)
    left = Counter(s[: n >> 1])
    right = Counter(s[n >> 1 :])
    ans = n
    for pivot in ascii_lowercase:
        ans = min(ans, n - left[pivot] - right[pivot])
        good = sum(left[c] for c in left if c <= pivot)
        good += sum(right[c] for c in right if c > pivot)
        ans = min(ans, n - good)
        good = sum(left[c] for c in left if c > pivot)
        good += sum(right[c] for c in right if c <= pivot)
        ans = min(ans, n - good)
    return ans

s = "pppxxp"
print(solve(s))

इनपुट

"pppxxp"

आउटपुट

1
  1. पायथन में कितनी रेखाएं प्रतिच्छेद करती हैं यह ढूंढने का प्रोग्राम पायथन में कितनी रेखाएं प्रतिच्छेद करती हैं यह ढूंढने का प्रोग्राम

    मान लीजिए हमें एक लिस्ट दी गई है जिसमें (m, c) मानों के जोड़े हैं। ये मान एक रेखा को दर्शाते हैं, जहां y = mx + c। हमें दो मान l और h भी दिए गए हैं। हमें उन रेखाओं की संख्या ढूंढनी है जो x = l से x = h की रेंज में एक-दूसरे को प्रतिच्छेद करती हैं। इसलिए, यदि इनपुट input_list = [[4, 6], [-6, 10], [8,

  1. Python में कितने क्यूब कटे हैं, यह खोजने का प्रोग्राम Python में कितने क्यूब कटे हैं, यह खोजने का प्रोग्राम

    मान लीजिए, a, b, और c आयामों के कई क्यूब्स हैं, और उनका उपयोग करके axbxc आयाम का एक नया बॉक्स बनाया जाता है। a, b, और c pairwise को-प्राइम हैं; gcd(a, b) = gcd(b,c) = gcd(c, a) = 1। हमें एक सिंगल स्लाइस के साथ बॉक्स को दो टुकड़ों में काटना है जैसा कि चित्र में दिखाया गया है। हमें यह पता करना है कि य

  1. - पायथन प्रोग्राम: स्ट्रिंग में मिरर कैरेक्टर्स खोजना

    एक यूजर इनपुट स्ट्रिंग और पोजिशन दी गई है, उस पोजिशन से हमें स्ट्रिंग की लंबाई तक अल्फाबेटिकल ऑर्डर में कैरेक्टर्स को मिरर करना है। इस ऑपरेशन में, हम a को z में, b को y में, c को x में, d को w में बदलते हैं और इसी तरह, यानी पहला कैरेक्टर लास्ट बन जाता है और इसी तरह।Input: p = 3 Input string = python