ধরুন আমাদের দুটি ছোট হাতের স্ট্রিং s এবং t আছে। এখন একটি ক্রিয়াকলাপ বিবেচনা করুন যেখানে আমরা s-এ একটি অক্ষরের সমস্ত ঘটনাকে অন্য অক্ষর দিয়ে প্রতিস্থাপন করি। যদি আমরা এই ক্রিয়াকলাপটি যে কোনও সংখ্যক বার করতে পারি, আমাদের পরীক্ষা করতে হবে s কে t-এ রূপান্তর করা যায় কি না৷
সুতরাং, যদি ইনপুটটি s ="eye" t ="pip" এর মত হয়, তাহলে আউটপুট হবে True, কারণ আমরা "e"s এর পরিবর্তে "p"s তারপর "y" কে "i" দিয়ে প্রতিস্থাপন করতে পারি।
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
-
একটি মানচিত্র m1 এবং আরেকটি মানচিত্র m2 সংজ্ঞায়িত করুন
-
n :=s
এর আকার -
আরম্ভ করার জন্য i :=0, যখন i
-
যদি s[i] m1 এ থাকে, তাহলে −
-
যদি m1[s[i]] t[i] এর মত হয়, তাহলে −
-
পরবর্তী পুনরাবৃত্তির জন্য যান
-
-
মিথ্যা ফেরত দিন
-
-
অন্যথায়
-
m1[s[i]] :=t[i]
-
-
-
প্রত্যাবর্তন সত্য
উদাহরণ
আরো ভালোভাবে বোঝার জন্য নিচের বাস্তবায়নটি দেখি -
#include <bits/stdc++.h>
using namespace std;
bool solve(string s, string t) {
map m1, m2;
int n = s.size();
for(int i = 0; i <n; i++){
if(m1.count(s[i])){
if(m1[s[i]] == t[i]) continue;
return false;
}
else{
m1[s[i]] = t[i];
}
}
return true;
}
int main(){
string s = "eye", t = "pip";
cout << solve(s, t);
} ইনপুট
"eye","pip"
আউটপুট
1