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

C++-এ কেমেলকেস ম্যাচিং


প্রশ্নের একটি তালিকা queries আর একটি প্যাটার্ন pattern দেওয়া আছে। একটি বুলিয়ান তালিকা ফেরত দিতে হবে, যেখানে answer[i] true হবে শুধু তখনই যখন queries[i] pattern-এর সাথে মেলে। একটি কোয়েরি শব্দ প্যাটার্নের সাথে মেলে যদি প্যাটার্নে ছোট হাতের অক্ষর ঢোকিয়ে কোয়েরি শব্দটি তৈরি করা যায়। উদাহরণ: ["FooBar","FooBarTest","FootBall","FrameBuffer","ForceFeedBack"] আর pattern = "FB" হলে ফলাফল [true,false,true,false,false]।

সমাধানের ধাপগুলো:

  • insertNode() মেথড বানান যা হেড আর স্ট্রিং s নেবে।
  • curr := head
  • i = 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, ]

  1. C++ Enum: একটি গাইড

  2. C++-এ static_assert এর ব্যবহার

  3. C++-এ Largest BST Subtree: বাইনারি ট্রিতে সর্বোচ্চ BST সাবট্রি খুঁজে বের করা

  4. C++ প্রোগ্রাম: স্ট্রিং লাইব্রেরি ব্যবহার করে স্ট্রিং ম্যাচিং করা