প্রশ্নের একটি তালিকা queries আর একটি প্যাটার্ন pattern দেওয়া আছে। একটি বুলিয়ান তালিকা ফেরত দিতে হবে, যেখানে answer[i] true হবে শুধু তখনই যখন queries[i] pattern-এর সাথে মেলে। একটি কোয়েরি শব্দ প্যাটার্নের সাথে মেলে যদি প্যাটার্নে ছোট হাতের অক্ষর ঢোকিয়ে কোয়েরি শব্দটি তৈরি করা যায়। উদাহরণ: ["FooBar","FooBarTest","FootBall","FrameBuffer","ForceFeedBack"] আর pattern = "FB" হলে ফলাফল [true,false,true,false,false]।
সমাধানের ধাপগুলো:
insertNode()মেথড বানান যা হেড আর স্ট্রিংsনেবে।curr := headi = 0থেকেs.size()-1পর্যন্ত:x := s[i]- যদি
curr.child[x]null না হয়,curr.child[x] := new node। curr := curr.child[x]।
curr.isEnd := true।- মূল মেথড থেকে:
head := new node, প্যাটার্ন হেডে ইনসার্ট করুন,n := queries.size(),m := temp.size(),ok := true।j = 0থেকেm-1পর্যন্ত:x := temp[j]- যদি
curr.child[x]থাকে,curr := curr.child[x]। - অন্যथा যদি
temp[j]'A' থেকে 'Z'-র মধ্যে হয়,ok := falseআর লুপ ব্রেক করুন। ans[i] := curr.isEnd AND ok।
ansফেরত দিন।
উদাহরণ (C++)
#include <bits/stdc++.h> using namespace std; void print_vector(vector<auto> v){ cout << "["; for(int i = 0; i<v.size(); i++){ cout << v[i] << ", "; } cout << "]"<<endl; } struct Node{ bool isEnd; map <char, Node*> child; Node(){ isEnd = false; } }; class Solution { public: void insertNode(Node* head, string s){ Node* curr = head; for(int i = 0; i < s.size(); i++){ char x = s[i]; if(!curr->child[x]){ curr->child[x] = new Node(); } curr = curr->child[x]; } curr->isEnd = true; } vector<bool> camelMatch(vector<string>& queries, string pattern){ Node* head = new Node(); insertNode(head, pattern); int n = queries.size(); vector <bool> ans(n); Node* curr; bool ok; for(int i = 0; i < n; i++){ string temp = queries[i]; curr = head; int m = temp.size(); ok = true; for(int j = 0; j < m; j++){ char x = temp[j]; if(curr->child[x]){ curr = curr->child[x]; } else if(temp[j] >= 'A' && temp[j] <= 'Z'){ ok = false; break; } } ans[i] = curr->isEnd && ok; } return ans; } }; main(){ vector<string> v1 = {"FooBar","FooBarTest","FootBall","FrameBuffer","ForceFeedBack"}; Solution ob; print_vector(ob.camelMatch(v1, "FB")); }ইনপুট
["FooBar","FooBarTest","FootBall","FrameBuffer","ForceFeedBack"] "FB"
আউটপুট
[1, 0, 1, 1, 0, ]