Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> C++

सी++ में कैमलकेस मिलान

मान लीजिए कि हमारे पास प्रश्नों की एक सूची है, और एक पैटर्न है, हमें एक उत्तर वापस करना होगा जो बूलियन की सूची होगी, जहां उत्तर [i] सत्य है और केवल अगर प्रश्न [i] पैटर्न से मेल खाता है। एक क्वेरी शब्द किसी दिए गए पैटर्न से मेल खाता है जब हम पैटर्न शब्द में लोअरकेस अक्षरों को सम्मिलित कर सकते हैं ताकि यह क्वेरी के बराबर हो।

तो अगर इनपुट ["फूबार", "फूबारटेस्ट", "फुटबॉल", "फ्रेमबफर", "फोर्सफीडबैक"] और पैटर्न ="एफबी" जैसा है, तो परिणाम [सत्य, झूठा, सच, झूठा, झूठा] होगा ।

इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -

  • इंसर्टनोड () नामक एक विधि को परिभाषित करें, यह सिर और स्ट्रिंग को लेता है

  • वक्र:=सिर

  • मैं के लिए 0 से लेकर s - 1 के आकार तक के लिए

    • एक्स:=एस [i]

    • अगर बच्चे [x] का curr शून्य नहीं है, तो बच्चे [x] का curr :=new node

    • curr :=बच्चे [x] करी के

  • सेट isEnd of curr :=true

  • मुख्य विधि से, निम्न कार्य करें -

  • सिर:=नया नोड, सिर में पैटर्न डालें, एन:=क्वेरी सरणी का आकार, एम:=अस्थायी का आकार, ठीक:=सच

  • j के लिए 0 से m - 1 की सीमा में

    • एक्स:=अस्थायी [जे]

    • अगर बच्चा [x] करी है, तो curr :=बच्चा [x] curr

    • अन्यथा जब अस्थायी [जे] ए से जेड तक की सीमा में है, तो ठीक है:=झूठा और लूप से तोड़ें

    • ans[i] :=isEnd of curr और OK

  • वापसी उत्तर

उदाहरण(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 का उपयोग कैसे करें:एक गाइड एक एन्यूमरेटेड प्रकार एक उपयोगकर्ता-परिभाषित डेटा प्रकार है जिसे मानों की श्रेणी से एक मान असाइन किया जा सकता है। Enums अक्सर प्रोग्रामिंग में उपयोग किया जाता है जब एक चर केवल एक मान को विशिष्ट मानों के सेट से बाहर संग्रहीत करने में सक्षम होना चाहिए। उदाहरण के

  1. सी++ में static_assert

    static_assert एक ऐसा फ़ंक्शन है जो प्रोग्राम को आउटपुट के साथ बहुत अधिक गड़बड़ किए बिना प्रोग्राम को संकलित करने के बाद स्क्रीन में त्रुटि को प्रिंट करने के लिए उपयोगी है। पहले C++11 और C++14 में, static_assert की अलग-अलग कार्यक्षमता थी, जिसका अर्थ है कि हमें static_assert को परिभाषित करते हुए अपना

  1. सी++ में सबसे बड़ा बीएसटी सबट्री

    मान लीजिए हमारे पास एक बाइनरी ट्री है; हमें इसका सबसे बड़ा सबट्री ढूंढ़ना होगा जहां सबसे बड़ा मतलब सबट्री जिसमें सबसे बड़ी संख्या में नोड्स हों। तो, अगर इनपुट पसंद है, तो आउटपुट 3 होगा, क्योंकि इस मामले में सबसे बड़ा बीएसटी सबट्री हाइलाइट किया गया है। इसे हल करने के लिए, हम इन चरणों का पालन करे