ধরা যাক আমরা দুটি স্ট্রিং ‘a’ এবং ‘b’ দিয়েছি। আমাদের পরীক্ষা করতে হবে যে প্রদত্ত দুটি স্ট্রিং একে অপরের অ্যানাগ্রাম কিনা। দুটি স্ট্রিং একে অপরের অ্যানাগ্রাম বলা হয় যদি একটি স্ট্রিং অন্যটির মতো একই অক্ষর ধারণ করে।
উদাহরণের জন্য
ইনপুট-1 −
a= anagram b= gnarama
আউটপুট −
True
ব্যাখ্যা − স্ট্রিং 'গ্নারাম'-এর স্ট্রিং 'অ্যানাগ্রাম'-এর মতো একই অক্ষর রয়েছে। তাই আমরা সত্য ফিরে.
ইনপুট-2 −
a= programmer b= mprogretmrqp
আউটপুট −
False
ব্যাখ্যা − স্ট্রিং 'b'-এ স্ট্রিং 'a' এর চেয়ে বেশি অক্ষর রয়েছে এবং এইভাবে আমরা বলতে পারি যে স্ট্রিংটির দৈর্ঘ্য ভিন্ন। এইভাবে আমরা মিথ্যা ফেরত দিই।
এই প্রশ্নটি সমাধান করার জন্য নীচের প্রোগ্রামে ব্যবহৃত পদ্ধতিটি নিম্নরূপ
প্রদত্ত দুটি স্ট্রিংয়ের জন্য আমাদের স্ট্রিংটির দৈর্ঘ্য রয়েছে যদি স্ট্রিংয়ের দৈর্ঘ্য ভিন্ন হয় আমরা ফলস ফেরত দেব। অন্যথায়, যদি স্ট্রিংয়ের দৈর্ঘ্য একই হয় তবে আমরা পরীক্ষা করব যে সেই স্ট্রিংয়ের প্রতিটি অক্ষর অন্য স্ট্রিংয়ের অক্ষরের সাথে মেলে কিনা এবং সত্য অন্যথায় মিথ্যা ফেরত দিব।
-
ইনপুট দুটি স্ট্রিং 'a' এবং 'b'
নিন -
একটি বুলিয়ান ফাংশন চেক অ্যানাগ্রাম (স্ট্রিং এ, স্ট্রিং বি) দুটি স্ট্রিং ‘এ’ এবং স্ট্রিং ‘বি’ নেয় এবং তারা একে অপরের অ্যানাগ্রাম কিনা তা ফেরত দেয়।
-
স্ট্রিং 'a' এবং 'b' এর দৈর্ঘ্য খুঁজুন এবং তারা সমান কি না তা পরীক্ষা করুন। যদি তারা সমান না হয় তাহলে মিথ্যা ফেরত দিন।
-
C++ STL(স্ট্যান্ডার্ড টেমপ্লেট লাইব্রেরি) ম্যাপ ফাংশন ব্যবহার করে, স্ট্রিং 'a'-এর উপর পুনরাবৃত্তি করে স্ট্রিং 'a'-এর প্রতিটি অক্ষরের একটি হ্যাশ টেবিল তৈরি করুন।
-
স্ট্রিং ‘a’-এর প্রতিটি অক্ষরের একটি মানচিত্র তৈরি করার সময় স্ট্রিং ‘b’-এ থাকা অক্ষরগুলিকে সরিয়ে দিন।
-
তারপর মানচিত্রের উপর পুনরাবৃত্তি করুন এবং হ্যাশ টেবিলে কোন অক্ষর অবশিষ্ট আছে কিনা তা পরীক্ষা করুন এবং মিথ্যা ফেরত দিন অন্যথায় সত্য ফেরত দিন।
উদাহরণ
#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'