मान लीजिए हमारे पास दो स्ट्रिंग्स 'a' और 'b' दी गई हैं। हमें जांचना है कि दी गई दो स्ट्रिंग्स एक-दूसरे की एनाग्राम हैं या नहीं। दो स्ट्रिंग्स को एक-दूसरे की एनाग्राम कहा जाता है यदि एक स्ट्रिंग में दूसरे के समान वर्ण हों।
उदाहरण के लिए
इनपुट-1 -
a = anagram b = gnarama
आउटपुट -
True
व्याख्या - स्ट्रिंग 'gnarama' में वही वर्ण हैं जो स्ट्रिंग 'anagram' में हैं। इसलिए हम True लौटाते हैं।
इनपुट-2 -
a = programmer b = mprogretmrqp
आउटपुट -
False
व्याख्या - स्ट्रिंग 'b' में स्ट्रिंग 'a' से अधिक वर्ण हैं और इस प्रकार हम कह सकते हैं कि स्ट्रिंग की लंबाई अलग है। इस प्रकार हम False लौटाते हैं।
नीचे दिए गए प्रोग्राम में इस प्रश्न को हल करने के लिए उपयोग किया गया दृष्टिकोण इस प्रकार है
दिए गए दो स्ट्रिंग्स के लिए हमारे पास स्ट्रिंग की लंबाई है यदि स्ट्रिंग की लंबाई अलग है तो हम False लौटाएंगे। अन्यथा, यदि स्ट्रिंग की लंबाई समान है तो हम जांचेंगे कि क्या उस स्ट्रिंग का प्रत्येक वर्ण दूसरी स्ट्रिंग के वर्णों से मेल खाता है और True लौटाएं अन्यथा False।
दो स्ट्रिंग्स 'a' और 'b' का इनपुट लें
एक बूलियन फंक्शन checkAnagram(string a, string b) दो स्ट्रिंग्स 'a' और स्ट्रिंग 'b' लेता है और लौटाता है कि वे एक-दूसरे की एनाग्राम हैं या नहीं।
स्ट्रिंग 'a' और 'b' की लंबाई ढूंढें और जांचें कि वे समान हैं या नहीं। यदि वे समान नहीं हैं तो false लौटाएं।
C++ STL (स्टैंडर्ड टेम्पलेट लाइब्रेरी) मैप फंक्शन का उपयोग करके, स्ट्रिंग 'a' के प्रत्येक वर्ण की एक हैश टेबल बनाएं स्ट्रिंग 'a' पर पुनरावृति करके।
स्ट्रिंग 'a' के प्रत्येक वर्ण का मैप बनाते समय उन वर्णों को हटा दें जो स्ट्रिंग 'b' में मौजूद हैं।
फिर मैप पर पुनरावृति करें और जांचें कि क्या हैश टेबल में कोई वर्ण बचे हैं और False लौटाएं अन्यथा True लौटाएं।
उदाहरण
#include <bits/stdc++.h>
using namespace std;
bool checkAnagram(string a, string b) {
int len1 = a.length();
int len2 = b.length();
if (len1 != len2) {
return false;
}
unordered_map<char, int> mp;
for (int i = 0; i < a.size(); i++) {
mp[a[i]]++;
mp[b[i]]--;
}
for (auto it : mp) {
if (it.second) return false;
}
return true;
}
int main() {
string a = "anagram";
string b = "gnarama";
cout << checkAnagram(a, b) << endl;
return 0;
}
आउटपुट
यदि हम उपरोक्त कोड चलाएंगे तो यह आउटपुट के रूप में प्रिंट करेगा,
1
चूंकि दोनों इनपुट स्ट्रिंग्स एक-दूसरे की एनाग्राम हैं इसलिए यह True यानी '1' लौटाता है।