एक स्ट्रिंग कैरेक्टर्स की सरणी है। और यह समस्या स्ट्रिंग के एलिमेंट्स को वैकल्पिक अपर और लोअर केस में क्रमबद्ध करने की है।
समस्या विवरण − वैकल्पिक लोअर अपर स्ट्रिंग क्रमबद्ध करना, एक ऐसी समस्या है जिसमें हमें एक अव्यवस्थित स्ट्रिंग प्रदान की जाती है जिसमें मिश्रित अपर और लोअरकेस कैरेक्टर्स होते हैं और हमें इस स्ट्रिंग को इस तरह क्रमबद्ध करना होता है कि अपर और लोअर केस कैरेक्टर्स वैकल्पिक स्थानों पर रखे जाएं लेकिन क्रमबद्ध तरीके से।
आइए एक उदाहरण लेते हैं विषय को बेहतर ढंग से समझने के लिए,
इनपुट: aFegrAfStRzsV आउटपुट: AaFeRfSgVrstz व्याख्या: अपर केस कैरेक्टर्स: A F R S V लोअर केस कैरेक्टर्स: a e f g r s t z
दोनों क्रमबद्ध तरीके से हैं इसलिए अब हम उन्हें वैकल्पिक क्रम में रख सकते हैं।
अब, चूंकि हमने समस्या को समझ लिया है। आइए इसके लिए एक समाधान बनाते हैं। एक तरीका अपरकेस और लोअरकेस अक्षरों के लिए क्रमबद्ध क्रम में सरणी बनाना और फिर उन्हें अंतिम स्ट्रिंग में वैकल्पिक करना है। हम इस तर्क के आधार पर एक एल्गोरिदम बनाए हैं।
एल्गोरिदम
चरण 1: एक सरणी lowercount[] में सभी लोअरकेस कैरेक्टर्स को क्रमबद्ध क्रम में जोड़ें। चरण 2: एक सरणी uppercount[] में सभी अपरकेस कैरेक्टर्स को क्रमबद्ध क्रम में जोड़ें। चरण 3: दोनों सरणियों से वैकल्पिक मानों का उपयोग करके अंतिम स्ट्रिंग बनाएं। चरण 4: परिणाम सरणी प्रिंट करें।
उदाहरण
#include <iostream> using namespace std; #define MAX 26 void alternateULSort(string& s) ; int main(){ string str = "aFegrAfStRzsV"; cout<<"अक्रमबद्ध स्ट्रिंग है: "<<str; cout<<"\nवैकल्पिक लोअर अपर क्रमबद्ध स्ट्रिंग है "; alternateULSort(str); cout << str << "\n"; } void alternateULSort(string& s){ int n = s.length(); int lowerCount[MAX] = { 0 }, upperCount[MAX] = { 0 }; for (int i = 0; i < n; i++) { if (isupper(s[i])) upperCount[s[i] - 'A']++; else lowerCount[s[i] - 'a']++; } int i = 0, j = 0, k = 0; while (k < n) { while (i < MAX && upperCount[i] == 0) i++; if (i < MAX) { s[k++] = 'A' + i; upperCount[i]--; } while (j < MAX && lowerCount[j] == 0) j++; if (j < MAX) { s[k++] = 'a' + j; lowerCount[j]--; } } } आउटपुट
अक्रमबद्ध स्ट्रिंग है: aFegrAfStRzsV वैकल्पिक लोअर अपर क्रमबद्ध स्ट्रिंग है AaFeRfSgVrstz