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

पायथन में पैलिंड्रॉम बनाने के लिए आवश्यक न्यूनतम स्वैप की संख्या गिनने का प्रोग्राम


मान लीजिए हमारे पास एक स्ट्रिंग s है। हमें इसे पैलिंड्रॉम बनाने के लिए आवश्यक न्यूनतम आसन्न स्वैप की संख्या ज्ञात करनी है। यदि कोई हल नहीं है तो -1 वापस करें।

उदाहरण के लिए, s = "xxyy" के लिए आउटपुट 2 होगा (मध्य के x और y को स्वैप करें, फिर पहले दो को स्वैप करके "yxxy" प्राप्त करें)।

एल्गोरिदम

  • util(s) फ़ंक्शन परिभाषित करें जो जांचता है कि पैलिंड्रॉम संभव है या नहीं (अधिकतम एक विषम फ्रीक्वेंसी वाला वर्ण)
  • यदि संभव है:
    • swaps := 0, left := 0, right := len(s)-1
    • s := list(s)
    • जब left < right:
      • यदि s[left] != s[right]:
        • k := right से बाएं खोजें जहां s[k] == s[left]
        • यदि k == left (मिलान नहीं मिला), तो swaps++, s[left], s[left+1] = s[left+1], s[left]
        • अन्यथा, k से right-1 तक स्वैप करें, swaps बढ़ाएं
      • left++, right--
    • swaps वापस करें
  • अन्यथा -1 वापस करें

उदाहरण

class Solution:
    def solve(self, s):
        def util(s):
            seen = {}
            for ch in s: seen[ch] = seen.get(ch, 0) + 1
            odd = sum(1 for v in seen.values() if v & 1)
            return odd <= 1
        swaps = 0
        if util(s):
            left, right = 0, len(s)-1
            s = list(s)
            while left < right:
                if s[left] != s[right]:
                    k = right
                    while k > left and s[k] != s[left]: k -= 1
                    if k == left:
                        swaps += 1
                        s[left], s[left+1] = s[left+1], s[left]
                    else:
                        while k < right:
                            s[k], s[k+1] = s[k+1], s[k]
                            k += 1
                            swaps += 1
                left += 1; right -= 1
            return swaps
        return -1

ob = Solution()
s = "xxyy"
print(ob.solve(s))

इनपुट

"xxyy"

आउटपुट

2
  1. - पायथन में कॉलम फ्लिप करके टारगेट मैट्रिक्स बनाने के लिए न्यूनतम ऑपरेशन गिनने का प्रोग्राम

    मान लीजिए हमारे पास एक मैट्रिक्स M और एक टारगेट मैट्रिक्स T है जिसमें समान संख्या में पंक्तियां और स्तंभ हैं। अब एक ऑपरेशन मान लें जहां हम मैट्रिक्स में एक विशेष कॉलम को फ्लिप करते हैं ताकि सभी 1, 0 में बदल जाएं और सभी 0, 1 में बदल जाएं। तो अगर हम मैट्रिक्स की पंक्तियों को मुफ्त में पुनः क्रमबद्ध क

  1. - पायथन में एक संख्या को दूसरी संख्या में बदलने के लिए आवश्यक न्यूनतम संक्रियाओं की संख्या खोजने का प्रोग्राम

    मान लीजिए हमारे पास एक संख्या start और एक अन्य संख्या end है (start < end), हमें start को end में बदलने के लिए आवश्यक न्यूनतम संक्रियाओं की संख्या ढूंढनी है इन संक्रियाओं का उपयोग करके: 1 से बढ़ाएं 2 से गुणा करें उदाहरण के लिए, यदि इनपुट है start = 5, end = 11, तो आउटपुट होगा 2, क्योंकि हम 2 से ग

  1. - पायथन में एक स्ट्रिंग को दूसरी स्ट्रिंग का सबस्ट्रिंग बनाने के लिए आवश्यक न्यूनतम संक्रियाओं की संख्या खोजने का प्रोग्राम

    मान लीजिए हमारे पास दो स्ट्रिंग्स s और t हैं, हमें s के लिए आवश्यक न्यूनतम संक्रियाओं की मात्रा ढूंढनी है ताकि t, s का सबस्ट्रिंग बन जाए। अब, प्रत्येक संक्रिया में, हम s में किसी भी स्थिति को चुन सकते हैं और उस स्थिति के वर्ण को किसी अन्य वर्ण में बदल सकते हैं। उदाहरण के लिए, यदि इनपुट है s = abbpq