मान लीजिए कि हमारे पास दो लोअरकेस स्ट्रिंग्स s और t हैं। अब एक ऑपरेशन पर विचार करें जहां हम एक चरित्र की सभी घटनाओं को दूसरे चरित्र के साथ बदलते हैं। अगर हम इस ऑपरेशन को कितनी भी बार कर सकते हैं, तो हमें यह जांचना होगा कि s को t में बदला जा सकता है या नहीं।
इसलिए, यदि इनपुट s ="eye" t ="pip" जैसा है, तो आउटपुट ट्रू होगा, क्योंकि हम "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