परिचय
इस ट्यूटोरियल में हम दी गई दो स्ट्रिंग्स से विशिष्ट (distinct) कैरेक्टर्स ढूंढना सीखेंगे। आइए एक उदाहरण देखते हैं।
इनपुट
string_one = "tutorialspoint" string_two = "tutorialsworld"
आउटपुट
d n p w
हम इस समस्या को हल करने के लिए हैशिंग (hashing) का उपयोग करेंगे। यह दो नेस्टेड लूप लिखने से अधिक कुशल है।
समस्या समाधान के चरण
- दोनों स्ट्रिंग्स को कुछ रैंडम मानों से इनिशियलाइज़ करें।
- map<char, int> chars के रूप में एक मैप इनिशियलाइज़ करें।
- पहली स्ट्रिंग पर पुनरावृत्ति करें और प्रत्येक कैरेक्टर को मान 1 के साथ मैप में डालें।
- अब, दूसरी स्ट्रिंग पर पुनरावृत्ति करें।
- जांचें कि कैरेक्टर पहले से मौजूद है या नहीं।
- यदि मौजूद है, तो इसे 0 असाइन करें।
- यदि मौजूद नहीं है, तो कैरेक्टर को मान 1 के साथ डालें।
- मैप पर पुनरावृत्ति करें और मान 1 वाले कैरेक्टर्स प्रिंट करें।
उदाहरण कोड
#include <bits/stdc++.h>
#include <map>
using namespace std;
void findDistinctCharacters(string one, string two){
// स्ट्रिंग में कैरेक्टर उपस्थिति इनिशियलाइज़ करना
map<char, int> chars;
// पहली स्ट्रिंग पर पुनरावृत्ति
for (int i = 0; i < one.size(); ++i){
// प्रत्येक कैरेक्टर को मैप में डालना
chars.insert({one[i], 1});
}
// दूसरी स्ट्रिंग पर पुनरावृत्ति
for (int i = 0; i < two.size(); ++i){
// जांचें कि वर्तमान कैरेक्टर स्ट्रिंग में है या नहीं
if (chars.count(two[i])) {
// सामान्य कैरेक्टर्स के लिए 0 असाइन करना
chars.find(two[i])->second = 0;
} else {
// नए कैरेक्टर्स डालना
chars.insert({two[i], 1});
}
}
// विशिष्ट कैरेक्टर्स प्रिंट करना
for (auto item: chars){
// उपस्थिति जांचना
if (item.second == 1) {
// विशिष्ट कैरेक्टर प्रिंट करना
cout << item.first << " ";
}
}
}
int main(){
string one = "tutorialspoint";
string two = "tutorialsworld";
findDistinctCharacters(one, two);
return 0;
}
आउटपुट
d n p w
व्याख्या
"tutorialspoint" और "tutorialsworld" में सामान्य अक्षर: t, u, o, r, i, a, l, s। विशिष्ट: पहली स्ट्रिंग में p, n; दूसरी में d, w।
निष्कर्ष
हैशिंग का उपयोग करके यह समाधान O(n+m) समय में काम करता है जहां n और m स्ट्रिंग्स की लंबाई हैं। यदि आपके कोई प्रश्न हैं, तो कमेंट सेक्शन में पूछें।