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

C++ . में प्रत्येक पहेली के लिए मान्य शब्दों की संख्या

मान लीजिए कि एक पहेली स्ट्रिंग है, एक शब्द मान्य है यदि निम्नलिखित दोनों शर्तें मान्य हैं -

  • शब्द में पहेली का पहला अक्षर होता है।

  • शब्द के प्रत्येक अक्षर के लिए, वह अक्षर पहेली में है।

मान लीजिए यदि हम एक उदाहरण पर विचार करें कि, यदि पहेली "abcdefg" की तरह है, तो मान्य शब्द "चेहरा", "गोभी" आदि हैं; लेकिन कुछ अमान्य शब्द "बीफ़ेड" हैं क्योंकि कोई "ए" और "आधारित" नहीं है क्योंकि "एस" है जो पहेली में मौजूद नहीं है।

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

इसलिए, यदि इनपुट शब्दों की तरह है =["आआआ", "आसा", "सक्षम", "क्षमता", "एक्ट", "अभिनेता", "पहुंच"], पहेली =["अबोवेज़", "एब्रोडीज़", "abslute",,"absoryz",,"actresz",,"gaswxyz"], तो आउटपुट [1,1,3,2,4,0] होगा, "aboveyz" के लिए एक मान्य शब्द के रूप में:"aaaa", one "एब्रोडीज़" के लिए मान्य शब्द:"आआआ", "एब्सल्यूट" के लिए तीन मान्य शब्द:"आआ", "असस", "सक्षम", "एब्सोरिज़" के लिए दो मान्य शब्द:"आआ", "असस", चार मान्य शब्द "actresz" के लिए:"aaaa", "asas", "actt", "access" और "gaswxyz" के लिए कोई मान्य शब्द नहीं हैं क्योंकि सूची में किसी भी शब्द में 'g' अक्षर नहीं है।

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

  • फ़ंक्शन को परिभाषित करें getMask(), इसमें s लगेंगे,

  • मुखौटा :=0

  • इनिशियलाइज़ करने के लिए:=0, जब i <साइज़ ऑफ़ s, अपडेट (i से 1 तक बढ़ाएँ), करें -

    • मुखौटा:=मुखौटा या 2^(s[i] - 'a' का ASCII)

  • वापसी मुखौटा

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

  • एक सरणी को परिभाषित करें ans

  • एक नक्शा परिभाषित करें मी

  • प्रारंभ करने के लिए i:=0, जब i

    • शब्द:=डब्ल्यू[i]

    • मुखौटा :=0

    • इनिशियलाइज़ j :=0 के लिए, जब j <शब्द का आकार, अपडेट करें (j को 1 से बढ़ाएँ), do−

      • मास्क:=मास्क या गेटमास्क (w[i])

    • (एम [मास्क] 1 से बढ़ाएं)

  • इनिशियलाइज़ i :=0 के लिए, जब i

    • शब्द:=पी[i]

    • मुखौटा:=getMask(शब्द)

    • पहला :=2^(शब्द[0] - 'ए' का ASCII)

    • वर्तमान:=मुखौटा

    • अस्थायी:=0

    • जबकि वर्तमान> 0, करें -

      • अगर करंट और फर्स्ट नॉन-जीरो है, तो -

        • करंट:=(करंट -1) और मास्क

    • उत्तर के अंत में अस्थायी डालें

  • वापसी उत्तर

आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -

उदाहरण

#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;
}
typedef long long int lli;
class Solution {
   public:
   lli getMask(string s){
      lli mask = 0;
      for(int i =0;i<s.size();i++){
         mask|= 1<<(s[i]-'a');
      }
      return mask;
   }
   vector<int> findNumOfValidWords(vector<string>& w, vector<string>& p) {
      vector <int> ans;
      map <lli, lli > m;
      for(int i =0;i<w.size();i++){
         string word = w[i];
         lli mask = 0;
         for(int j =0;j<word.size();j++){
            mask|= getMask(w[i]);
         }
         m[mask]++;
      }
      for(int i = 0; i<p.size();i++){
         string word = p[i];
         lli mask = getMask(word);
         lli first = 1<<(word[0]-'a');
         lli current = mask;
         lli temp = 0;
         while(current>0){
            if(current & first)temp+=m[current];
            current = (current-1)&mask;
         }
         ans.push_back(temp);
      }
      return ans;
   }
};
main(){
   Solution ob;
   vector<string> v = {"aaaa","asas","able","ability","actt","actor","access"};
   vector<string> v1 = {"aboveyz","abrodyz","abslute","absoryz","actresz","gaswxyz"};
   print_vector(ob.findNumOfValidWords(v,v1));
}

इनपुट

{"aaaa","asas","able","ability","actt","actor","access"},
{"aboveyz","abrodyz","abslute","absoryz","actresz","gaswxyz"}

आउटपुट

[1, 1, 3, 2, 4, 0, ]

  1. हेक्साडेसिमल से दशमलव के लिए C++ प्रोग्राम

    एक इनपुट के रूप में एक हेक्साडेसिमल संख्या के साथ दिया गया, कार्य दिए गए हेक्साडेसिमल संख्या को दशमलव संख्या में परिवर्तित करना है। कंप्यूटर में हेक्साडेसिमल संख्या को आधार 16 के साथ दर्शाया जाता है और दशमलव संख्या को आधार 10 के साथ दर्शाया जाता है और 0 - 9 के मूल्यों के साथ दर्शाया जाता है जबकि हे

  1. सी ++ में जटिल संख्या के लिए असिन () फ़ंक्शन?

    यहां हम सम्मिश्र संख्याओं के लिए असिन () विधि देखेंगे। सम्मिश्र संख्याओं का उपयोग सम्मिश्र शीर्षलेख फ़ाइल का उपयोग करके किया जा सकता है। उस हेडर फाइल में असिन () फंक्शन भी मौजूद होता है। यह सामान्य असिन () फ़ंक्शन का जटिल संस्करण है। इसका उपयोग किसी सम्मिश्र संख्या की सम्मिश्र चाप ज्या ज्ञात करने के

  1. एसीओएस () सी ++ में जटिल संख्या के लिए कार्य करता है?

    यहां हम सम्मिश्र संख्याओं के लिए एकोस () विधि देखेंगे। सम्मिश्र संख्याओं का उपयोग सम्मिश्र शीर्षलेख फ़ाइल का उपयोग करके किया जा सकता है। उस हेडर फाइल में acos() फंक्शन भी मौजूद होता है। यह सामान्य acos() फ़ंक्शन का जटिल संस्करण है। इसका उपयोग किसी सम्मिश्र संख्या की सम्मिश्र चाप कोज्या ज्ञात करने के