ধরুন আমাদের দুটি স্ট্রিং s এবং t আছে; তারা আইসোমরফিক কি না তা আমাদের পরীক্ষা করতে হবে। দুটি স্ট্রিংকে আইসোমরফিক বলা হয় যদি s-এর অক্ষরগুলি t পেতে প্রতিস্থাপন করা যায়।
অক্ষরের ক্রম সংরক্ষণ করার সময় একটি অক্ষরের সমস্ত ঘটনা অবশ্যই অন্য অক্ষর দিয়ে প্রতিস্থাপিত করতে হবে৷ কোন দুটি অক্ষর একই অক্ষরে মানচিত্র করতে পারে না কিন্তু একটি অক্ষর নিজেই মানচিত্র করতে পারে।
সুতরাং, যদি ইনপুটটি s ="degg", t ="add" এর মত হয়, তাহলে আউটপুটটি সত্য হবে, কারণ e a-তে ম্যাপ করতে পারে এবং g d-এ ম্যাপ করতে পারে।
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
-
256 আকারের একটি অ্যারে অ্যারের সংজ্ঞায়িত করুন এবং -1
দিয়ে পূরণ করুন -
256 আকারের পরিদর্শন করা অ্যারে সংজ্ঞায়িত করুন এবং 0
দিয়ে পূরণ করুন -
256 আকারের একটি পরিদর্শনকৃত অ্যারে সংজ্ঞায়িত করুন এবং 0
দিয়ে পূরণ করুন -
আরম্ভ করার জন্য i :=0, যখন i
-
যদি পরিদর্শন করা [s[i]] 1 এর সমান বা পরিদর্শন করা1[t[i]] 1 এর সমান, তাহলে −
-
যদি arr[s[i]] 'a'-এর t[i] - ASCII-এর সমান না হয়, তাহলে −
-
মিথ্যা ফেরত দিন
-
-
-
অন্যথায়
-
পরিদর্শন [s[i]] :=1
-
পরিদর্শন করেছেন1[t[i]] :=1
-
arr[s[i]] :=t[i] - 'a'
এর ASCII
-
-
-
প্রত্যাবর্তন সত্য
উদাহরণ
আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -
#include <bits/stdc++.h> using namespace std; class Solution { public: bool isIsomorphic(string s, string t) { vector<int> arr(256, -1); vector<bool> visited(256, 0); vector<bool> visited1(256, 0); for (int i = 0; i < s.length(); i++) { if (visited[s[i]] == 1 || visited1[t[i]] == 1) { if (arr[s[i]] != t[i] - 'a') { return false; } } else { visited[s[i]] = 1; visited1[t[i]] = 1; arr[s[i]] = t[i] - 'a'; } } return true; } }; main(){ Solution ob; cout << (ob.isIsomorphic("sky","fry")); }
ইনপুট
"sky","fry"
আউটপুট
1