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

एक स्ट्रिंग में वर्णों को इस तरह पुनर्व्यवस्थित करें कि कोई भी दो आसन्न C++ में समान न हों

हमें एक स्ट्रिंग दी गई है, मान लीजिए, किसी भी लंबाई का str। कार्य दिए गए स्ट्रिंग को इस तरह से पुनर्व्यवस्थित करना है कि परिणामी स्ट्रिंग में समान आसन्न वर्ण एक साथ व्यवस्थित नहीं होंगे।

आइए इसके लिए विभिन्न इनपुट आउटपुट परिदृश्य देखें -

इनपुट - स्ट्रिंग स्ट्र ="इटिन"

आउटपुट - एक स्ट्रिंग में वर्णों की पुनर्व्यवस्था जैसे कि कोई भी दो आसन्न समान न हों:initn।

स्पष्टीकरण - हमें एक स्ट्रिंग टाइप वेरिएबल दिया गया है, मान लीजिए, str. अब हम एक इनपुट स्ट्रिंग के वर्णों को इस तरह से पुनर्व्यवस्थित करेंगे कि कोई भी दो समान वर्ण एक ही स्थिति में न हों, अर्थात 'nn' को स्थानांतरित करना क्योंकि वे समान हैं और एक दूसरे से सटे हुए हैं। तो अंतिम स्ट्रिंग 'initn' होगी।

इनपुट - स्ट्रिंग str ="अब्बाअब्बा"

आउटपुट - एक स्ट्रिंग में वर्णों की पुनर्व्यवस्था जैसे कि कोई भी दो आसन्न समान न हों:ababababa

स्पष्टीकरण - हमें एक स्ट्रिंग टाइप वेरिएबल दिया गया है, मान लीजिए, str. अब हम एक इनपुट स्ट्रिंग के वर्णों को इस तरह से पुनर्व्यवस्थित करेंगे कि कोई भी दो समान वर्ण एक ही स्थिति में न हों अर्थात 'bb', 'aa', 'bb', 'aa' को स्थानांतरित करना क्योंकि वे समान हैं और प्रत्येक के निकट हैं अन्य। तो अंतिम स्ट्रिंग 'अब्बाबाबा' होगी।

नीचे दिए गए प्रोग्राम में इस्तेमाल किया गया तरीका इस प्रकार है

  • स्ट्रिंग प्रकार का एक वेरिएबल इनपुट करें, मान लें, str और स्ट्रिंग के आकार की गणना करें और इसे वैरिएबल नामक लंबाई में स्टोर करें।

  • जांचें कि क्या लंबाई 0 है, फिर वापस आएं।

  • डेटा को फ़ंक्शन पुनर्व्यवस्था (str, लंबाई) में पास करें।

  • समारोह के अंदर पुनर्व्यवस्था (गिरफ्तारी, लंबाई)

    • एक स्ट्रिंग का आकार (लंबाई + 1)/2 के साथ सेट करें।

    • एक वेक्टर प्रकार चर को vec(26, 0) के रूप में घोषित करें जो पूर्णांक प्रकार डेटा और स्ट्रिंग प्रकार के एक ptr को ptr (लंबाई, '' ') के रूप में संग्रहीत करेगा। 0 के रूप में पूर्णांक प्रकार का एक अस्थायी चर।

    • इसके माध्यम से str को पुनरावृत्त करने के लिए लूप प्रारंभ करें। लूप के अंदर, vec[it - 'a']++ सेट करें।

    • ch के रूप में एक कैरेक्टर टाइप वेरिएबल बनाएं और इसे कॉल के साथ मैक्सिमम (vec) फंक्शन पर सेट करें।

    • एक पूर्णांक प्रकार चर को कुल घोषित करें और इसे vec[ch - 'a'] के साथ सेट करें।

    • जांचें कि IF कुल आकार से बड़ा है तो वापस आएं।

    • लूप शुरू करें जबकि कुल फिर ptr[temp] को ch पर सेट करें, temp को temp + 2 पर सेट करें और कुल को 1 से घटाएं।

    • vec[ch - 'a'] को 0 पर सेट करें। लूप फॉर i से 0 तक मैं 26 से कम तक प्रारंभ करें। लूप के अंदर, प्रारंभ करें जबकि vec[i] 0 से अधिक है। अस्थायी को (temp> =लंबाई) पर सेट करें? 1 :अस्थायी और ptr[temp] से 'a' + i और temp से temp + 2 और vec[i] को 1 से घटाएं।

    • वापसी पीटीआर

  • फ़ंक्शन के अंदर अधिकतम चार (कॉन्स्ट वेक्टर&vec)

    • एक पूर्णांक प्रकार चर को 0 से अधिक और वर्ण प्रकार चर को 'c' के रूप में घोषित करें

    • लूप फॉर i से 0 तक i से i तक 26 से कम शुरू करें। लूप के अंदर, जांचें कि क्या vec[i] उच्च से कम है, फिर उच्च को vec[i] और c को 'a' + i पर सेट करें।

    • वापसी ग

  • परिणाम प्रिंट करें।

उदाहरण

#include <bits/stdc++.h>
using namespace std;
char maximum(const vector<int>& vec){
   int high = 0;
   char c;
   for(int i = 0; i < 26; i++){
      if(vec[i] > high){
         high = vec[i];
         c = 'a' + i;
      }
   }
   return c;
}
string Rearrangement(string str, int length){
   int size = (length + 1) / 2;
   vector<int> vec(26, 0);
   string ptr(length, ' ');
   int temp = 0;
   for(auto it : str){
      vec[it - 'a']++;
   }
   char ch = maximum(vec);
   int total = vec[ch - 'a'];
   if(total > size){
      return "";
   }
   while(total){
      ptr[temp] = ch;
      temp = temp + 2;
      total--;
   }
   vec[ch - 'a'] = 0;
   for(int i = 0; i < 26; i++){
      while (vec[i] > 0){
         temp = (temp >= length) ? 1 : temp;
         ptr[temp] = 'a' + i;
         temp = temp + 2;
         vec[i]--;
      }
   }
   return ptr;
}
int main(){
   string str = "itinn";
   int length = str.length();
   if(length == 0){
      cout<<"Please enter a valid string";
   }
   string count = Rearrangement(str, length);
   if(count == ""){
      cout<<"Please enter a valid string";
   }
   else{
      cout<<"Rearrangement of characters in a string such that no two adjacent are same is: "<<count;
   }
   return 0;
}

आउटपुट

यदि हम उपरोक्त कोड चलाते हैं तो यह निम्न आउटपुट उत्पन्न करेगा

Rearrangement of characters in a string such that no two adjacent are same is: initn

  1. बाइनरी ट्री में नोड्स का अधिकतम योग जैसे कि C++ प्रोग्राम में डायनामिक प्रोग्रामिंग का उपयोग करते हुए कोई भी दो आसन्न नहीं हैं

    इस समस्या में, हमें एक बाइनरी ट्री दिया जाता है जिसमें प्रत्येक नोड का एक मान होता है। हमारा काम बाइनरीट्री में नोड्स की अधिकतम राशि को खोजने के लिए एक प्रोग्राम बनाना है जैसे कि कोई भी दो आसन्न न हो। डायनामिक प्रोग्रामिंग का उपयोग करना। समस्या का विवरण - हम योग को अधिकतम करने के लिए बाइनरी ट्री के

  1. सर्कुलर सरणी में अधिकतम योग जैसे कि कोई भी दो तत्व सी ++ में आसन्न नहीं हैं

    इस समस्या में, हमें एक वृत्ताकार सरणी cirArr[] दी गई है। हमारा काम सर्कुलर सरणी में अधिकतम योग खोजने के लिए एक प्रोग्राम बनाना है जैसे कि कोई भी दो तत्व सी ++ में आसन्न नहीं हैं। समस्या का विवरण वृत्ताकार सरणी के लिए, हमें सरणी के तत्वों का अधिकतम योग ज्ञात करना होगा जैसे कि आसन्न तत्वों को नहीं लि

  1. सी ++ में गेटलाइन (स्ट्रिंग)

    इसका उपयोग स्ट्रीम से वर्णों को बिना स्वरूपित इनपुट के रूप में निकालने के लिए किया जाता है और उन्हें सी-स्ट्रिंग के रूप में s में संग्रहीत करता है, जब तक कि निकाला गया वर्ण परिसीमन वर्ण नहीं होता है, या n वर्ण s (समाप्त अशक्त वर्ण सहित) को लिखे जाते हैं। घोषणा इस प्रकार है: basic_istream& getlin