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

सी++ में विशेष बाइनरी स्ट्रिंग


मान लीजिए कि हमारे पास एक स्थानिक बाइनरी स्ट्रिंग है। इस स्ट्रिंग में निम्नलिखित कुछ गुण हैं -

  • 0 और 1 की संख्या समान होती है

  • बाइनरी स्ट्रिंग में प्रत्येक उपसर्ग में कम से कम 1s जितना 0s होता है

अब मान लें कि हमारे पास विशेष स्ट्रिंग एस है, एक चाल वास्तव में दो लगातार, गैर-खाली, एस के विशेष सबस्ट्रिंग का चयन करना और उन्हें स्वैप करना है।

हमें किसी भी चाल के अंत में, लेक्सिकोग्राफ़िक रूप से सबसे बड़ी परिणामी स्ट्रिंग को खोजना होगा।

इसलिए, यदि इनपुट 11011000 की तरह है, तो आउटपुट 11100100 होगा, ऐसा इसलिए है क्योंकि:सबस्ट्रिंग "10" और "1100" की अदला-बदली की जाती है। कुछ चालों के बाद यह शब्दावली की दृष्टि से सबसे बड़ी स्ट्रिंग है।

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

  • फ़ंक्शन को परिभाषित करें makeLargestSpecial(), इसमें कुछ समय लगेगा,

  • रिट:=खाली स्ट्रिंग

  • स्ट्रिंग्स की एक सरणी v परिभाषित करें

  • मैं :=0

  • प्रारंभ करने के लिए j :=0, cnt :=0, जब j

    • अगर s[j] '1' के समान है, तो -

      • (cnt 1 से बढ़ाएँ)

    • अन्यथा

      • (cnt 1 से घटाएं)

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

      • v

        के अंत में "1" + makeLargestSpecial (इंडेक्स i + 1 से j - i - 1) में s का सबस्ट्रिंग डालें
      • मैं :=जे + 1

  • सरणी को क्रमबद्ध करें v.r

  • इनिशियलाइज़ i:=0 के लिए, जब i

    • रिट:=रिट + वी[i]

  • वापसी रिट

  • मुख्य विधि से स्ट्रिंग के साथ makeLargestSpecial() को कॉल करें।

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

उदाहरण

#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;
   }
};
main(){
   Solution ob;
   cout << (ob.makeLargestSpecial("11011000"));
}

इनपुट

11011000

आउटपुट

11100100

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

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

  1. सी++ में न्यूनतम स्ट्रिंग

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

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

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