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

সি++-এ ওয়ার্ড প্যাটার্ন মেলে কিনা যাচাই করার প্রোগ্রাম


সমস্যা বিবরণ

একটি প্যাটার্ন p এবং একটি স্ট্রিং str দেওয়া আছে। চেক করতে হবে str কি p-র প্যাটার্ন ফলো করে। এখানে বাইজেকশন থাকতে হবে: প্যাটার্নের প্রতিটি ক্যারেক্টারের সাথে স্ট্রিংয়ের একটি নন-এম্পটি ওয়ার্ড ম্যাপড থাকবে।

উদাহরণ: pattern = "cbbc", str = "word pattern pattern word" → আউটপুট True।

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

  1. স্ট্রিংকে স্পেস দিয়ে স্প্লিট করে ওয়ার্ডের ভেক্টর বানান।
  2. দুটি ম্যাপ: p2i (প্যাটার্ন ক্যারেক্টার → আইডি) এবং str2i (ওয়ার্ড → আইডি)।
  3. প্যাটার্ন ও ওয়ার্ড দুটোরই জন্য ইউনিক আইডি অ্যাসাইন করে দুটি এনকোডেড স্ট্রিং বানান।
  4. দুটি এনকোডেড স্ট্রিং সমান কিনা চেক করুন।

উদাহরণ কোড

#include <bits/stdc++.h>
using namespace std;

class Solution {
public:
    bool wordPattern(string pattern, string str) {
        istringstream strcin(str);
        string word;
        vector<string> words;
        while (strcin >> word) words.push_back(word);
        
        unordered_map<char, int> p2i;
        int i = 0; string pat = "";
        for (auto c : pattern) {
            if (!p2i.count(c)) p2i[c] = ++i;
            pat += to_string(p2i[c]);
        }
        
        unordered_map<string, int> str2i;
        i = 0; string pat1 = "";
        for (auto& c : words) {
            if (!str2i.count(c)) str2i[c] = ++i;
            pat1 += to_string(str2i[c]);
        }
        return pat1 == pat;
    }
};

int main() {
    Solution ob;
    cout << ob.wordPattern("cbbc", "word pattern pattern word");
    return 0;
}

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

ইনপুট: "cbbc", "word pattern pattern word"

আউটপুট: 1

  1. C++-এ বাইনারি ট্রি হাইট-ব্যালেন্সড কিনা যাচাই করার প্রোগ্রাম

  2. সি++ প্রোগ্রাম: ৩-মাত্রিক সমতলে বিন্দুগুলো সমতলাকার কিনা যাচাই

  3. C++ প্রোগ্রাম: গ্রাফ স্ট্রংলি কানেক্টেড কিনা যাচাই

  4. C#-এ একটি স্ট্রিং Heterogram কিনা তা যাচাই করা