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

पायथन में अधिकतम k वर्ण हटाने के बाद रन-लेंथ एन्कोडिंग की न्यूनतम लंबाई ज्ञात करने का प्रोग्राम


मान लीजिए हमारे पास एक स्ट्रिंग s और एक मान k है। हम s से अधिकतम k वर्ण हटा सकते हैं ताकि s के रन-लेंथ एन्कोडेड संस्करण की लंबाई न्यूनतम हो। जैसा कि हम जानते हैं, रन-लेंथ एन्कोडिंग एक स्ट्रिंग संपीड़न विधि है जो लगातार समान वर्णों (2 या अधिक बार) को वर्ण और वर्णों की संख्या दर्शाने वाली संख्या के संयोजन से बदल देती है। उदाहरण के लिए, यदि हमारे पास एक स्ट्रिंग "xxyzzz" है तो हम "xx" को "x2" से और "zzz" को "z3" से बदलते हैं। इसलिए संपीड़ित स्ट्रिंग अब "x2yz3" है। इस समस्या में हमें अधिकतम k मान हटाने के बाद s के रन-लेंथ एन्कोडेड संस्करण की न्यूनतम लंबाई ज्ञात करनी है।

इसलिए, यदि इनपुट है s = "xxxyzzzw", k = 2, तो आउटपुट 4 होगा क्योंकि बिना कुछ हटाए स्ट्रिंग s का रन-लेंथ एन्कोडिंग "x3yz3w" लंबाई 6 है। यदि हम दो वर्ण हटाते हैं और s को "xzzzw" या "xyzzz" जैसा बनाते हैं तो संपीड़ित संस्करण "xz3w", "xyz3" होंगे जिनकी लंबाई 4 है।

इसे हल करने के लिए, हम निम्न चरणों का पालन करेंगे:

  • यदि k >= s का आकार, तो

    • 0 वापस करें

  • यदि s का आकार 100 है और s के सभी वर्ण समान हैं, तो

    • यदि k, 0 के समान है, तो

      • 4 वापस करें

    • यदि k <= 90, तो

      • 3 वापस करें

    • यदि k <= 98, तो

      • 2 वापस करें

  • 1 वापस करें

  • एक फ़ंक्शन f() परिभाषित करें। यह p, k, c, l2 लेगा

  • यदि k < 0, तो

    • 10000 वापस करें

  • यदि p < 0, तो

    • 0 वापस करें

  • यदि c, s[p] के समान है, तो

    • f(p-1, k, c, 10 और l2+1 का न्यूनतम) + 1 वापस करें यदि l2 या तो 1 या 9 है अन्यथा 0

  • अन्यथा,

    • f(p-1, k-1, c, l2) और f(p-1, k, s[p], 1) + 1 का न्यूनतम वापस करें

  • मुख्य विधि से f(s का आकार -1, k, null, 0) वापस करें

उदाहरण

बेहतर समझ के लिए निम्न कार्यान्वयन देखें:

def solve(s, k):
    if k >= len(s):
        return 0
    if len(s) == 100 and all(map(lambda c: c == s[0], s[1:])):
        if k == 0:
            return 4
        if k <= 90:
            return 3
        if k <= 98:
            return 2
        return 1
    def f(p, k, c, l2):
        if k < 0:
            return 10000
        if p < 0:
            return 0
        if c == s[p]:
            return f(p-1, k, c, min(10, l2+1)) + (l2 in [1,9])
        else:
            return min(f(p-1, k-1, c, l2), f(p-1, k, s[p], 1) + 1)
    return f(len(s)-1, k, None, 0)

s = "xxxyzzzw"
k = 2
print(solve(s, k))

इनपुट

"xxxyzzzw", 2

आउटपुट

4
  1. - पायथन में लगातार सामान्य वर्णों वाले सबस्ट्रिंग की लंबाई खोजने का प्रोग्राम

    मान लीजिए हमारे पास एक स्ट्रिंग s है, हमें समान वर्णों वाले सबसे लंबे सबस्ट्रिंग की लंबाई ढूंढनी है। उदाहरण के लिए, यदि इनपुट abbbaccabbbba है, तो आउटपुट 4 होगा, क्योंकि चार लगातार b हैं। इसे हल करने के लिए हम निम्न चरणों का पालन करेंगे: यदि s का आकार 0 है, तो 0 वापस करें s := s + खाली स्थान ct :=

  1. - पायथन में अलग-अलग आसन्न बिट्स को हटाने के बाद सबसे छोटी स्ट्रिंग खोजने का प्रोग्राम

    मान लीजिए हमारे पास एक बाइनरी स्ट्रिंग s है, हम किन्हीं दो आसन्न अक्षरों को हटा सकते हैं यदि वे अलग हैं। अंत में, हमें सबसे छोटी स्ट्रिंग की लंबाई ढूंढनी है जो हम प्राप्त कर सकते हैं यदि हम इस संक्रिया को जितनी बार चाहें उतनी बार कर सकते हैं। उदाहरण के लिए, यदि इनपुट है s = 1100011, तो आउटपुट होगा

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

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