মান লিইয়ে নিই একটি পাজল স্ট্রিং রয়েছে, একটি শব্দ বৈধ হবে যদি নিম্নলিখিত দুটি শর্ত পূরণ হয়:
শব্দটি পাজলের প্রথম অক্ষরটি ধারণ করে।
শব্দের প্রতিটি অক্ষর পাজলে রয়েছে।
মান লিইয়ে নিই একটি উদাহরণ, যদি পাজল হয় "abcdefg", তবে বৈধ শব্দগুলো হল "face", "cabbage" ইত্যাদি; কিন্তু কিছু অবৈধ শব্দ হল "beefed" কারণ এতে "a" নেই এবং "based" কারণ এতে "s" আছে যা পাজলে নেই।
আমাদের উত্তর লিস্ট বের করতে হবে, যেখানে answer[i] হল দেওয়া শব্দ লিস্ট words-এ থাকা শব্দগুলোর সংখ্যা যা puzzles[i] পাজলের সাথে বৈধ।
সুতরাং, যদি ইনপুট হয় words = ["aaaa","asas","able","ability","actt","actor","access"], puzzles = ["aboveyz","abrodyz","abslute","absoryz","actresz","gaswxyz"], তবে আউটপুট হবে [1,1,3,2,4,0], কারণ "aboveyz"-এর জন্য একটি বৈধ শব্দ: "aaaa", "abrodyz"-এর জন্য একটি বৈধ শব্দ: "aaaa", "abslute"-এর জন্য তিনটি বৈধ শব্দ: "aaaa", "asas", "able", "absoryz"-এর জন্য দুটি বৈধ শব্দ: "aaaa", "asas", "actresz"-এর জন্য চারটি বৈধ শব্দ: "aaaa", "asas", "actt", "access" এবং "gaswxyz"-এর জন্য কোনো বৈধ শব্দ নেই কারণ লিস্টে কোনো শব্দে 'g' অক্ষর নেই।
সমাধান পদ্ধতি
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे:
- getMask() ফাংশন সংজ্ঞায়িত করুন, যা s গ্রহণ করবে,
- mask := 0
- i := 0 থেকে आरंभ करें, जब i < s-এর আকার, अपडेट करें (i को 1 से बढ़ाएं), करें:
- mask := mask OR 2^(s[i] - 'a'-র ASCII)
- mask ফেরত দিন
- মূল পদ্ধতিতে নিম্নলিখিত কাজ করুন:
- একটি ans সরণি সংজ্ঞায়িত করুন
- একটি ম্যাপ m সংজ্ঞায়িত করুন
- i := 0 থেকে आरंभ करें, जब i < w-এর আকার, अपडেট करें (i को 1 से बढ़ाएं), करें:
- word := w[i]
- mask := 0
- j := 0 থেকে आरंभ करें, जब j < word-এর আকার, अपডेट करें (j को 1 से बढ़ाएं), करें:
- mask := mask OR getMask(w[i])
- (m[mask] 1 বাড়ান)
- i := 0 থেকে आरंभ करें, जब i < p-এর আকার, अपডেট करें (i को 1 से बढ़ाएं), करें:
- word := p[i]
- mask := getMask(word)
- first := 2^(word[0] - 'a'-র ASCII)
- current := mask
- temp := 0
- যতক্ষণ current > 0, করুন:
- যদি current & first নন-জিরো হয়, তবে:
- current := (current - 1) AND mask
- যদি current & first নন-জিরো হয়, তবে:
- temp কে ans-এর শেষে যোগ করুন
- ans ফেরত দিন
উদাহরণ
বेहतर समझ के लिए निम्नलिखित कार्यान्वयन देखें:
#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, ]