ধরুন একটি ধাঁধার স্ট্রিং আছে, একটি শব্দ বৈধ যদি নিম্নলিখিত উভয় শর্তই বৈধ হয় −
-
শব্দে ধাঁধার প্রথম অক্ষর রয়েছে।
-
শব্দের প্রতিটি অক্ষরের জন্য, সেই অক্ষরটি ধাঁধায়।
ধরুন আমরা যদি একটি উদাহরণ বিবেচনা করি যে, যদি ধাঁধাটি "abcdefg" এর মতো হয়, তাহলে বৈধ শব্দগুলি হল "মুখ", "বাঁধাকপি" ইত্যাদি; কিন্তু কিছু অকার্যকর শব্দ "বিফড" কারণ সেখানে "a" এবং "ভিত্তিক" নেই কারণ "s" আছে যা ধাঁধার মধ্যে নেই।
আমাদের উত্তরের তালিকা খুঁজে বের করতে হবে, যেখানে উত্তর[i] হল প্রদত্ত শব্দ তালিকার শব্দের সংখ্যা যা ধাঁধার ধাঁধা[i] এর ক্ষেত্রে বৈধ।
সুতরাং, যদি ইনপুট শব্দের মত হয় =["aaaa","asas","able","ability","actt","Actor","access"], ধাঁধা =["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,
লাগবে -
মুখোশ :=0
-
আরম্ভ করার জন্য i :=0, যখন i
-
মুখোশ :=মাস্ক বা 2^(s[i] - 'a' এর ASCII)
-
-
ফেরত মাস্ক
-
প্রধান পদ্ধতি থেকে নিম্নলিখিতগুলি করুন -
-
একটি অ্যারে উত্তর সংজ্ঞায়িত করুন
-
একটি মানচিত্র m
সংজ্ঞায়িত করুন -
আরম্ভ করার জন্য i :=0, যখন i
-
শব্দ :=w[i]
-
মুখোশ :=0
-
j শুরু করার জন্য :=0, যখন j <শব্দের আকার, আপডেট (j 1 দ্বারা বাড়ান), do−
-
মাস্ক :=মাস্ক বা গেটমাস্ক(w[i])
-
-
(m[মাস্ক] 1 দ্বারা বাড়ান)
-
-
আরম্ভ করার জন্য i :=0, যখন i
-
শব্দ :=p[i]
-
মুখোশ :=getMask(শব্দ)
-
প্রথম :=2^(শব্দ[0] - 'a' এর 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, ]