हमें एक स्ट्रिंग दी गई है, मान लीजिए, किसी भी लंबाई का 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