मान लीजिए कि हमने दो तार 'ए' और 'बी' दिए हैं। हमें यह जांचना है कि दिए गए दो तार एक दूसरे के आरेख हैं या नहीं। दो स्ट्रिंग्स को एक दूसरे के विपर्ययण कहा जाता है यदि एक स्ट्रिंग में दूसरे के समान वर्ण होता है।
उदाहरण के लिए
इनपुट-1 -
a= anagram b= gnarama
आउटपुट -
True
स्पष्टीकरण - स्ट्रिंग 'ग्नराम' में वही वर्ण है जो स्ट्रिंग 'विपरीत' में है। इसलिए हम ट्रू लौटते हैं।
इनपुट-2 -
a= programmer b= mprogretmrqp
आउटपुट -
False
स्पष्टीकरण - स्ट्रिंग 'बी' में स्ट्रिंग 'ए' की तुलना में अधिक वर्ण हैं और इस प्रकार हम कह सकते हैं कि स्ट्रिंग की लंबाई अलग है। इस प्रकार हम झूठी वापसी करते हैं।
इस प्रश्न को हल करने के लिए नीचे दिए गए प्रोग्राम में इस्तेमाल किया गया तरीका इस प्रकार है
दिए गए दो तारों के लिए हमारे पास स्ट्रिंग की लंबाई है यदि स्ट्रिंग की लंबाई अलग है तो हम झूठी वापसी करेंगे। अन्यथा, यदि स्ट्रिंग की लंबाई समान है, तो हम जांच करेंगे कि क्या उस स्ट्रिंग का प्रत्येक वर्ण किसी अन्य स्ट्रिंग के वर्णों से मेल खाता है और सही है अन्यथा गलत है।
-
इनपुट दो स्ट्रिंग्स 'ए' और 'बी' लें
-
एक बूलियन फ़ंक्शन checkAnagram(string a, string b) दो स्ट्रिंग्स 'a' और string 'b' लेता है और वापस लौटाता है कि वे एक दूसरे के विपर्यय हैं या नहीं।
-
स्ट्रिंग 'ए' और 'बी' की लंबाई पाएं और जांचें कि वे बराबर हैं या नहीं। अगर वे बराबर नहीं हैं तो झूठी वापसी करें।
-
C++ STL (स्टैंडर्ड टेम्प्लेट लाइब्रेरी) मैप फ़ंक्शन का उपयोग करते हुए, स्ट्रिंग 'a' के ऊपर पुनरावृति करके स्ट्रिंग 'a' के प्रत्येक वर्ण की हैश तालिका बनाएं।
-
स्ट्रिंग 'ए' के प्रत्येक वर्ण का नक्शा बनाते समय उन वर्णों को हटा दें जो स्ट्रिंग 'बी' में मौजूद हैं।
-
फिर मानचित्र पर पुनरावृति करें और जांचें कि क्या हैश तालिका में कोई वर्ण शेष हैं और गलत लौटाएं अन्यथा सही लौटें।
उदाहरण
#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
चूंकि दोनों इनपुट स्ट्रिंग एक दूसरे के विपर्ययण हैं इसलिए यह सच है यानी '1'