ধরুন আমাদের কাছে প্রশ্নগুলির একটি তালিকা এবং একটি প্যাটার্ন রয়েছে, আমাদের একটি উত্তর দিতে হবে যা হবে বুলিয়ানের তালিকা, যেখানে উত্তর[i] সত্য হয় এবং শুধুমাত্র যদি প্রশ্নগুলি[i] প্যাটার্নের সাথে মেলে। একটি ক্যোয়ারী শব্দ একটি প্রদত্ত প্যাটার্নের সাথে মেলে যখন আমরা প্যাটার্ন শব্দে ছোট হাতের অক্ষর সন্নিবেশ করতে পারি যাতে এটি কোয়েরির সমান হয়৷
সুতরাং ইনপুট যদি ["FooBar","FooBarTest","FootBall","FrameBuffer","ForceFeedBack"] এবং প্যাটার্ন ="FB" এর মত হয়, তাহলে ফলাফল হবে [সত্য, মিথ্যা, সত্য, মিথ্যা, মিথ্যা] .
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
-
insertNode() নামক একটি পদ্ধতি সংজ্ঞায়িত করুন, এটি মাথা এবং স্ট্রিং s
নেয় -
curr :=মাথা
-
0 থেকে s - 1
এর আকারের মধ্যে i এর জন্য-
x :=s[i]
-
যদি curr এর চাইল্ড[x] শূন্য না হয়, তাহলে curr এর চাইল্ড[x] :=নতুন নোড
-
curr :=curr এর সন্তান [x]
-
-
সেট isEnd of curr :=true
-
প্রধান পদ্ধতি থেকে, নিম্নলিখিতগুলি করুন -
-
head :=নতুন নোড, মাথায় প্যাটার্ন ঢোকান, n :=ক্যোয়ারী অ্যারের আকার, m :=তাপমাত্রার আকার, ঠিক আছে :=সত্য
-
j-এর জন্য 0 থেকে m – 1
পরিসরে-
x :=তাপমাত্রা[j]
-
যদি curr এর সন্তান [x], তাহলে curr :=curr এর সন্তান [x]
-
অন্যথায় যখন temp[j] A থেকে Z রেঞ্জে থাকে, তখন ঠিক আছে :=মিথ্যা এবং ব্রেক ফ্রম লুপ
-
উত্তর[i] :=curr এর শেষ এবং ঠিক আছে
-
-
উত্তর ফেরত দিন
উদাহরণ(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, ]