समस्या विवरण
मान लीजिए हमारे पास दो लोअरकेस स्ट्रिंग्स s और t हैं। अब एक ऑपरेशन पर विचार करें जहां हम s में एक कैरेक्टर की सभी घटनाओं को दूसरे कैरेक्टर से बदलते हैं। यदि हम इस ऑपरेशन को कितनी भी बार कर सकते हैं, तो हमें जांचना है कि क्या s को t में बदला जा सकता है या नहीं।
उदाहरण के लिए, यदि इनपुट है s = "eye", t = "pip", तो आउटपुट True होगा, क्योंकि हम "e" को "p" से और फिर "y" को "i" से बदल सकते हैं।
हल करने का दृष्टिकोण
इस समस्या को हल करने के लिए हम निम्नलिखित चरणों का पालन करेंगे:
- एक मैप m1 और दूसरा मैप m2 परिभाषित करें
- n := s का आकार
- i := 0 से n-1 तक:
- यदि s[i], m1 में है, तो:
- यदि m1[s[i]] == t[i], तो अगले इटरेशन पर जाएं
- false वापस करें
- अन्यथा: m1[s[i]] := t[i]
- यदि s[i], m1 में है, तो:
- true वापस करें
उदाहरण
#include <bits/stdc++.h>
using namespace std;
bool solve(string s, string t) {
unordered_map<char, char> 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