কম্পিউটার টিউটোরিয়াল

সি++-এ ক্যারেক্টার রিপ্লেস করে একটি স্ট্রিংকে অন্য স্ট্রিংয়ে রূপান্তর সম্ভব কিনা যাচাই


সমস্যা বিবরণ

দুটি লোয়ারকেস স্ট্রিং s এবং t দেওয়া আছে। একটি অপারেশনে s-এর যেকোনো ক্যারেক্টারের সব অকরেন্সকে অন্য ক্যারেক্টারের দিয়ে রিপ্লেস করা যায়। এই অপারেশন যেকোনো সংখ্যকবার করা যায়। চেক করতে হবে s কি t-এ রূপান্তর করা সম্ভব।

উদাহরণ: s = "eye", t = "pip" হলে আউটপুট True। কারণ 'e' -> 'p' এবং 'y' -> 'i' রিপ্লেস করলে "pip" পাওয়া যায়।

সমাধানের পদ্ধতি

  1. দুটি ম্যাপ m1 (s থেকে t) এবং m2 (t থেকে s) ব্যবহার করুন।
  2. প্রতিটি ক্যারেক্টার পেয়ার (s[i], t[i]) এর জন্য চেক করুন।
  3. যদি s[i] ইতিমধ্যে ম্যাপে থাকে তবে m1[s[i]] == t[i] কিনা চেক করুন।
  4. যদি t[i] ইতিমধ্যে ম্যাপে থাকে তবে m2[t[i]] == s[i] কিনা চেক করুন (বাইজেকশন নিশ্চিত করতে)।
  5. কোনো সন্দর্ভ পেলে false রিটার্ন করুন।
  6. সব চেক পাস করলে 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]) return false;
        } else {
            m1[s[i]] = t[i];
        }
        if (m2.count(t[i])) {
            if (m2[t[i]] != s[i]) return false;
        } else {
            m2[t[i]] = s[i];
        }
    }
    return true;
}

int main() {
    string s = "eye", t = "pip";
    cout << solve(s, t);
    return 0;
}

ইনপুট ও আউটপুট

ইনপুট: "eye", "pip"

আউটপুট: 1

  1. পাইথনে একটি স্ট্রিং সোয়্যাপ দিয়ে দুটি স্ট্রিং সমান করা সম্ভব কিনা যাচাই

  2. পাইথনে যাচাই করুন স্ট্রিং রিপিট করে অন্য স্ট্রিং বানানো যায় কিনা

  3. পাইথনে স্ট্রিং ক্যারেক্টার দিয়ে kটি প্যালিনড্রোম বানানো সম্ভব কিনা চেক করা

  4. পাইথনে দেয়া স্ট্রিং প্যাংগ্রাম কিনা যাচাই করার প্রোগ্রাম