সমস্যা বিবরণ
একটি প্যাটার্ন p এবং একটি স্ট্রিং str দেওয়া আছে। চেক করতে হবে str কি p-র প্যাটার্ন ফলো করে। এখানে বাইজেকশন থাকতে হবে: প্যাটার্নের প্রতিটি ক্যারেক্টারের সাথে স্ট্রিংয়ের একটি নন-এম্পটি ওয়ার্ড ম্যাপড থাকবে।
উদাহরণ: pattern = "cbbc", str = "word pattern pattern word" → আউটপুট True।
সমাধানের পদ্ধতি
- স্ট্রিংকে স্পেস দিয়ে স্প্লিট করে ওয়ার্ডের ভেক্টর বানান।
- দুটি ম্যাপ:
p2i(প্যাটার্ন ক্যারেক্টার → আইডি) এবংstr2i(ওয়ার্ড → আইডি)। - প্যাটার্ন ও ওয়ার্ড দুটোরই জন্য ইউনিক আইডি অ্যাসাইন করে দুটি এনকোডেড স্ট্রিং বানান।
- দুটি এনকোডেড স্ট্রিং সমান কিনা চেক করুন।
উদাহরণ কোড
#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