इस प्रोग्रामिंग समस्या में, हमें दो तार दिए गए हैं। और हमें स्ट्रिंग के सभी वर्णों को ढूंढना है जो दोनों स्ट्रिंग में सामान्य हैं और हमें इन सामान्य वर्णों को वर्णानुक्रम में प्रिंट करना है . और यदि कोई सामान्य अक्षर नहीं आता है तो 'नो कॉमन कैरेक्टर्स' प्रिंट करें। यह देखते हुए कि स्ट्रिंग में सभी लोअरकेस अक्षर नहीं हैं।
आइए एक उदाहरण लेते हैं -
Input : string1 : adsfhslf string2 : fsrakf Output : affs
स्पष्टीकरण - दो तारों के बीच a, f, s होते हैं। इसलिए लेक्सिकोग्राफिक आउटपुट 'एएफएस' है।
Input : string1 : abcde string2 : glhyte Output : No common characters
स्पष्टीकरण - कोई भी वर्ण समान नहीं हैं।
इस समस्या को हल करने के लिए, हमें स्ट्रिंग में सामान्य वर्ण खोजने होंगे। और आउटपुट इन स्ट्रिंग्स का लेक्सिकोग्राफिकल ऑर्डर होगा।
एल्गोरिदम
इस समस्या को हल करने के लिए एल्गोरिथम है -
Step 1 : Create two arrays a1[] and a2[] of size 26 each for counting the number of alphabets in the strings string1 and string2. Step 2 : traverse a1[] and a2[]. and in sequence print all those numbers that have values in the array.
उदाहरण
आइए इस एल्गोरिथम पर आधारित एक प्रोग्राम बनाते हैं जो कार्य को स्पष्ट करता है -
#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