একটি প্যাটার্ন এবং একটি স্ট্রিং str দেওয়া আছে। str প্যাটার্নটি ফলো করে কিনা তা চেক করুন। ফলো মানে প্যাটার্নের প্রতিটি অক্ষর এবং str-এর প্রতিটি শব্দের মধ্যে বাইজেকশন (এক-এক মিল) থাকবে।
উদাহরণ: pattern = "cbbc", str = "word pattern pattern word" -> true।
সমাধানের ধাপসমূহ
- str-কে শব্দে ভাগ করুন (words অ্যারে)।
- প্যাটার্নের অক্ষরগুলোর ইনডেক্স ম্যাপ p2i বানান, প্যাটার্ন স্ট্রিং pat তৈরি করুন।
- শব্দগুলোর ইনডেক্স ম্যাপ str2i বানান, প্যাটার্ন স্ট্রিং pat1 তৈরি করুন।
- pat == pat1 হলে true রিটার্ন করুন।
C++ কোড উদাহরণ
#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) == 0) { i++; 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) == 0) { i++; 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