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