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