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

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


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

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

इनपुट - string str = "itinn"

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

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

इनपुट - string str = "abbaabbaa"

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

व्याख्या - हमें एक स्ट्रिंग प्रकार का चर दिया गया है, मान लीजिए, str। अब हम इनपुट स्ट्रिंग के वर्णों को इस तरह से पुनर्व्यवस्थित करेंगे कि कोई दो समान वर्ण एक ही स्थान पर न हों यानी 'bb', 'aa', 'bb', 'aa' को शिफ्ट करना क्योंकि वे समान और एक-दूसरे के आसन्न हैं। तो अंतिम स्ट्रिंग 'ababababa' होगी।

नीचे दिए गए प्रोग्राम में उपयोग किया गया दृष्टिकोण इस प्रकार है

  • str के रूप में स्ट्रिंग प्रकार का चर इनपुट करें और स्ट्रिंग का आकार गणना करें और इसे length नामक चर में संग्रहीत करें।

  • जांचें IF length 0 है तो लौटें।

  • Rearrangement(str, length) फ़ंक्शन को डेटा पास करें।

  • फ़ंक्शन Rearrangement(arr, length) के अंदर

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

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

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

    • ch के रूप में कैरेक्टर प्रकार का चर बनाएं और इसे maximum(vec) फ़ंक्शन को कॉल करके सेट करें।

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

    • जांचें IF total, size से बड़ा है तो लौटें।

    • WHILE total लूप शुरू करें तो ptr[temp] को ch पर सेट करें, temp को temp + 2 पर सेट करें और total को 1 से घटाएं।

    • vec[ch - 'a'] को 0 पर सेट करें। i को 0 से 26 से कम तक FOR लूप शुरू करें। लूप के अंदर, WHILE vec[i] 0 से बड़ा है शुरू करें। temp को (temp >= length) ? 1 : temp पर सेट करें और ptr[temp] को 'a' + i पर और temp को temp + 2 पर सेट करें और vec[i] को 1 से घटाएं।

    • ptr लौटाएं

  • फ़ंक्शन char maximum(const vector<int>& vec) के अंदर

    • high को 0 के रूप में पूर्णांक प्रकार का चर घोषित करें और 'c' के रूप में कैरेक्टर प्रकार का चर

    • i को 0 से 26 से कम तक FOR लूप शुरू करें। लूप के अंदर, जांचें IF vec[i], high से बड़ा है तो high को vec[i] पर और c को 'a' + i पर सेट करें।

    • c लौटाएं

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

उदाहरण

#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<<"कृपया एक वैध स्ट्रिंग दर्ज करें";     }     string count = Rearrangement(str, length);     if(count == ""){       cout<<"कृपया एक वैध स्ट्रिंग दर्ज करें";     }     else{       cout<<"स्ट्रिंग में वर्णों का पुनर्व्यवस्था जैसे कि कोई दो आसन्न समान न हों: "<<count;     }     return 0; }

आउटपुट

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

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

  1. C++ प्रोग्राम में डायनामिक प्रोग्रामिंग का उपयोग करके बाइनरी ट्री में आसन्न न होने वाले नोड्स का अधिकतम योग C++ प्रोग्राम में डायनामिक प्रोग्रामिंग का उपयोग करके बाइनरी ट्री में आसन्न न होने वाले नोड्स का अधिकतम योग

    इस समस्या में, हमें एक बाइनरी ट्री दिया गया है जिसमें प्रत्येक नोड का एक मान है। हमारा कार्य एक प्रोग्राम बनाना है जो डायनामिक प्रोग्रामिंग का उपयोग करके बाइनरी ट्री में ऐसे नोड्स का अधिकतम योग ढूंढे जो आसन्न न हों। समस्या विवरण हम बाइनरी ट्री के उपसमुच्चय (subsets) को चुनेंगे ताकि योग अधिकतम हो औ

  1. सर्कुलर ऐरे में अधिकतम योग जहाँ कोई दो आसन्न तत्व न हों - C++ सर्कुलर ऐरे में अधिकतम योग जहाँ कोई दो आसन्न तत्व न हों - C++

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

  1. - C++ में getline (string)

    इसका उपयोग स्ट्रीम से अनफॉर्मेटेड इनपुट के रूप में कैरेक्टर्स निकालने और उन्हें c-स्ट्रिंग के रूप में s में संग्रहीत करने के लिए किया जाता है, जब तक कि निकाला गया कैरेक्टर डिलिमिटिंग कैरेक्टर न हो, या n कैरेक्टर्स s में लिखे जा चुके हों (टर्मिनेटिंग नल कैरेक्टर सहित)। डिक्लेरेशन इस प्रकार है: basic