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

सी ++ में एएए या बीबीबी के बिना स्ट्रिंग

मान लीजिए कि हमारे पास दो पूर्णांक A और B हैं, हमें कोई भी स्ट्रिंग S लौटानी है, जैसे -

  • S की लंबाई A + B है और इसमें ठीक A अक्षर 'a' और B संख्या 'b' अक्षर हैं।

  • सबस्ट्रिंग "आआ" और "बीबीबी" स्ट्रिंग एस में नहीं होंगे

इसलिए यदि दिए गए पूर्णांक A =4, B =1 हैं, तो परिणाम "आबा" होगा।

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

  • एक स्ट्रिंग रिट परिभाषित करें, प्रारंभ में यह खाली है

  • जबकि |ए-बी|>=2,

    • अगर ए> बी, तो

      • ret :=ret concatenate 'aa'

      • A को 2 से घटाएं

      • अगर बी गैर-शून्य है तो 'बी' को रिट के साथ जोड़ दें और बी को 1 से घटा दें

    • अन्य

      • ret :=ret concatenate 'bb'

      • बी को 2 से घटाएं

      • अगर ए गैर-शून्य है तो 'ए' को रिट के साथ जोड़ दें और ए को 1 से घटा दें

  • जबकि या तो A गैर-शून्य है, या B गैर-शून्य है

    • यदि ए शून्य नहीं है और (रिट का आकार <2 या नहीं (रिट का आकार> =2 और रिट का अंतिम तत्व =रिट का दूसरा अंतिम तत्व) और रिट का अंतिम तत्व 'ए' है), तो

      • रिट :=रिट + 'ए', ए को 1 से घटाएं

      • अगर बी गैर-शून्य है

        • ret :=ret concatenate 'b', B को 1 से घटाएं

      • अन्यथा 'बी' को फिर से संयोजित करें, बी को 1 से घटाएं, यदि ए 0 नहीं है, तो ए को रिट के साथ संयोजित करें और ए को 1 से घटाएं

  • वापसी रिट

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

उदाहरण

#include <bits/stdc++.h>
using namespace std;
class Solution {
   public:
   string strWithout3a3b(int A, int B) {
      string ret = "";
      while(abs(A - B) >= 2){
         if(A > B){
            ret += 'a';
            ret += 'a';
            A -= 2;
            if(B) {
               ret += 'b';
               B--;
            }
         }else{
            ret += 'b';
            ret += 'b';
              B -= 2;
              if(A) {
               ret += 'a';
               A--;
            }
         }  
     }
      while(A || B){
         if(A && (ret.size() < 2 || !(ret.size() >= 2 && ret[ret.size() - 1] == ret[ret.size() -                2] && ret[ret.size() - 1] == 'a') ) ){
            ret += 'a';
            A--;
            if(B) {
               ret += 'b';
               B--;
            }
         }else{
            ret += 'b';
            B--;
            if(A) {
              ret += 'a';
              A--;
            }
         }      
      }
      return ret;
   }
};
main(){
   Solution ob;
   cout << (ob.strWithout3a3b(4, 1));
}

इनपुट

4
1

आउटपुट

"aabaa"

  1. सी++ में जंप गेम वी

    मान लीजिए कि हमारे पास पूर्णांकों की एक सरणी है जिसे arr और एक पूर्णांक d कहा जाता है। एक चरण में हम इंडेक्स i से − . पर जा सकते हैं i + x जहां:i + x

  1. सी ++ में एक स्ट्रिंग को टोकन करना

    इस खंड में, हम देखेंगे कि C++ में स्ट्रिंग्स को कैसे टोकननाइज़ किया जाता है। सी में हम वर्ण सरणी के लिए strtok() फ़ंक्शन का उपयोग कर सकते हैं। यहां हमारे पास एक स्ट्रिंग क्लास है। अब हम देखेंगे कि उस स्ट्रिंग से कुछ सीमांकक का उपयोग करके स्ट्रिंग को कैसे काटा जाता है। C++ फीचर का उपयोग करने के लिए,

  1. सी ++ में एक स्ट्रिंग को टोकननाइज़ करें?

    पहला तरीका है, रिक्त स्थान से अलग किए गए शब्दों को पढ़ने के लिए एक स्ट्रिंगस्ट्रीम का उपयोग करना। यह थोड़ा सीमित है लेकिन यदि आप उचित जांच प्रदान करते हैं तो यह कार्य काफी अच्छी तरह से करता है। उदाहरण #include <vector> #include <string> #include <sstream> using namespace std; in