इस प्रोग्रामिंग समस्या में, हमें दो स्ट्रिंग्स दी गई हैं। और हमें स्ट्रिंग के उन सभी वर्णों को ढूंढना है जो दोनों स्ट्रिंग्स में सामान्य हैं और हमें इन सामान्य वर्णों को वर्णमाला क्रम में प्रिंट करना है। और यदि कोई सामान्य अक्षर नहीं मिलता तो 'NO COMMON CHARACTERS' प्रिंट करें। दिया गया है कि स्ट्रिंग में सभी लोअरकेस अक्षर नहीं हैं।
आइए एक उदाहरण लेते हैं -
Input : string1 : adsfhslf string2 : fsrakf Output : affs
व्याख्या - दोनों स्ट्रिंग्स के बीच a, f, s हैं। इसलिए लेक्सिकोग्राफिकल आउटपुट 'afs' है।
Input : string1 : abcde string2 : glhyte Output : No common characters
व्याख्या - कोई वर्ण सामान्य नहीं हैं।
इस समस्या को हल करने के लिए, हमें स्ट्रिंग में सामान्य वर्ण ढूंढने की आवश्यकता है। और आउटपुट इन स्ट्रिंग्स का लेक्सिकोग्राफिकल क्रम होगा।
एल्गोरिदम
इस समस्या को हल करने का एल्गोरिदम है -
चरण 1 : स्ट्रिंग string1 और string2 में वर्णमाला की गिनती के लिए आकार 26 के दो सरणी a1[] और a2[] बनाएं। चरण 2 : a1[] और a2[] को ट्रैवर्स करें। और क्रम में उन सभी संख्याओं को प्रिंट करें जिनके सरणी में मान हैं।
उदाहरण
आइए इस एल्गोरिदम के आधार पर कार्य को दर्शाने वाला एक प्रोग्राम बनाते हैं -
#include<bits/stdc++.h> using namespace std; int main(){ string string1 = "adjfrdggs"; string string2 = "gktressd"; cout<<"The strings are "<<string1<<" and "<<string2; cout<<"\nThe common characters are : "; int a1[26] = {0}; int a2[26] = {0}; int i , j; char ch; char ch1 = 'a'; int k = (int)ch1, m; for(i = 0 ; i < string1.length() ; i++){ a1[(int)string1[i] - k]++; } for(i = 0 ; i < string2.length() ; i++){ a2[(int)string2[i] - k]++; } for(i = 0 ; i < 26 ; i++){ if (a1[i] != 0 and a2[i] != 0){ for(j = 0 ; j < min(a1[i] , a2[i]) ; j++){ m = k + i; ch = (char)(k + i); cout << ch; } } } return 0; } आउटपुट
The strings are adjfrdggs and gktressd The common characters are : dgrs