কম্পিউটার টিউটোরিয়াল

সি++-এ প্রতিটি পাজলের জন্য বৈধ শব্দের সংখ্যা


মান লিইয়ে নিই একটি পাজল স্ট্রিং রয়েছে, একটি শব্দ বৈধ হবে যদি নিম্নলিখিত দুটি শর্ত পূরণ হয়:

  • শব্দটি পাজলের প্রথম অক্ষরটি ধারণ করে।

  • শব্দের প্রতিটি অক্ষর পাজলে রয়েছে।

মান লিইয়ে নিই একটি উদাহরণ, যদি পাজল হয় "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
      • 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, ]

  1. C++ প্রোগ্রাম: হেক্সাডেসিমেল থেকে ডেসিমেল কনভার্সন

  2. C++-এ জটিল সংখ্যার জন্য atan() ফাংশন

  3. C++-এ জটিল সংখ্যার জন্য asin() ফাংশন

  4. C++-এ জটিল সংখ্যার জন্য acos() ফাংশন