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

C++ में विशेष बाइनरी स्ट्रिंग (Special Binary String) - लेक्सिकोग्राफिकली सबसे बड़ी स्ट्रिंग


समस्या विवरण

एक विशेष बाइनरी स्ट्रिंग के निम्न गुण होते हैं:

  • 0s और 1s की संख्या समान होती है।
  • हर प्रीफिक्स (prefix) में 0s से कम या बराबर 1s होते हैं।

एक चाल में, S के दो लगातार, गैर-खाली, विशेष सबस्ट्रिंग्स को चुना जाता है और उन्हें स्वैप किया जाता है। हमें किसी भी संख्या में चालों के बाद लेक्सिकोग्राफिकली (lexicographically) सबसे बड़ी परिणामी स्ट्रिंग ज्ञात करनी है।

उदाहरण

इनपुट

11011000

आउटपुट

11100100

व्याख्या

सबस्ट्रिंग्स "10" और "1100" को स्वैप किया गया। यह कुछ चालों के बाद संभव लेक्सिकोग्राफिकली सबसे बड़ी स्ट्रिंग है।

समाधान दृष्टिकोण (पुनरावर्ती + सॉर्टिंग)

  1. स्ट्रिंग को प्राथमिक विशेष सबस्ट्रिंग्स में विभाजित करें (काउंटर का उपयोग करके: 1 के लिए +1, 0 के लिए -1; जब काउंटर 0 हो जाए)।
  2. प्रत्येक प्राथमिक सबस्ट्रिंग के लिए, उसके आंतरिक भाग (पहले और अंतिम अक्षर को छोड़कर) पर पुनरावर्ती रूप से लागू करें।
  3. प्रत्येक प्राथमिक सबस्ट्रिंग को "1" + पुनरावर्ती_परिणाम + "0" में लपेटें।
  4. सभी प्राथमिक सबस्ट्रिंग्स को अवरोही क्रम (descending order) में क्रमबद्ध करें।
  5. उन्हें जोड़कर परिणाम प्राप्त करें।

कार्यकारी प्रोग्राम

#include <bits/stdc++.h>
using namespace std;

class Solution {
public:
    string makeLargestSpecial(string s) {
        string ret = "";
        vector<string> v;
        int i = 0;
        for (int j = 0, cnt = 0; j < s.size(); j++) {
            if (s[j] == '1') cnt++;
            else cnt--;
            if (cnt == 0) {
                v.push_back("1" + makeLargestSpecial(s.substr(i + 1, j - i - 1)) + "0");
                i = j + 1;
            }
        }
        sort(v.rbegin(), v.rend()); // अवरोही क्रम
        for (int i = 0; i < v.size(); i++) ret += v[i];
        return ret;
    }
};

int main() {
    Solution ob;
    cout << ob.makeLargestSpecial("11011000");
    return 0;
}

आउटपुट

11100100
  1. स्ट्रिंग से बाइनरी ट्री का निर्माण C++ में स्ट्रिंग से बाइनरी ट्री का निर्माण C++ में

    मान लीजिए हमारे पास एक स्ट्रिंग है जिसमें पैरेंथेसिस और पूर्णांक हैं। हमें उस स्ट्रिंग से एक बाइनरी ट्री का निर्माण करना है। पूरा इनपुट एक बाइनरी ट्री को दर्शाता है। इसमें एक पूर्णांक होता है जिसके बाद शून्य, एक या दो जोड़े पैरेंथेसिस होते हैं। पूर्णांक रूट का मान दर्शाता है और पैरेंथेसिस का एक जोड़

  1. - C++ में न्यूनतम स्ट्रिंग परिवर्तन

    मान लीजिए हमारे पास समान लंबाई की दो स्ट्रिंग्स s और t हैं, और दोनों लोअरकेस अक्षरों में हैं। पहले हम s को किसी भी क्रम में पुनर्व्यवस्थित करते हैं, फिर s को t में बदलने के लिए आवश्यक न्यूनतम परिवर्तनों की संख्या गिनते हैं। उदाहरण के लिए, यदि इनपुट है s = eccynue, t = science, तो आउटपुट 2 होगा। यद

  1. C++ में दो बाइनरी स्ट्रिंग्स को जोड़ें C++ में दो बाइनरी स्ट्रिंग्स को जोड़ें

    दो बाइनरी संख्या वाली स्ट्रिंग्स दी गई हैं, हमें उन दो बाइनरी स्ट्रिंग्स को जोड़कर प्राप्त परिणाम ढूंढना है और परिणाम को बाइनरी स्ट्रिंग के रूप में लौटाना है। बाइनरी संख्याएं वे संख्याएं हैं जिन्हें या तो 0 या 1 के रूप में व्यक्त किया जाता है। 2 बाइनरी संख्याओं को जोड़ते समय बाइनरी जोड़ का नियम हो