ধরুন আমাদের দুটি ছোট হাতের স্ট্রিং 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