मान लीजिए कि एक पहेली स्ट्रिंग है, एक शब्द मान्य है यदि निम्नलिखित दोनों शर्तें मान्य हैं -
-
शब्द में पहेली का पहला अक्षर होता है।
-
शब्द के प्रत्येक अक्षर के लिए, वह अक्षर पहेली में है।
मान लीजिए यदि हम एक उदाहरण पर विचार करें कि, यदि पहेली "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, ]