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

C++-এ শব্দ দৈর্ঘ্যের সর্বোচ্চ গুণফল


একটি স্ট্রিং অ্যারে words দেওয়া আছে। length(word[i]) * length(word[j])-র সর্বোচ্চ মান বের করতে হবে যাতে দুটি শব্দের কোনো সাধারণ অক্ষর নেই। ধরে নেওয়া হয় প্রতিটি শব্দ শুধু ছোট হাতের অক্ষর ধারণ করে। এমন দুটি শব্দ না থাকলে ০ ফেরত দিন। উদাহরণ: ["abcw", "baz", "foo", "bar", "xtfn", "abcdef"] হলে আউটপুট ১৬, কারণ দুটি শব্দ হতে পারে "abcw", "xtfn"।

সমাধানের ধাপগুলো:

  • getRev() মেথড বানান যা x নেবে:
    • ret := 0
    • i = 0 থেকে ২৫ পর্যন্ত: যদি (x >> i) & 1 == 0, ret |= (1 << i)
    • ret ফেরত দিন।
  • মূল মেথড থেকে:
    • m ম্যাপ, n := words.size()
    • i = 0 থেকে n-1 পর্যন্ত:
      • s := words[i], key := 0
      • j = 0 থেকে s.size()-1 পর্যন্ত: key |= 1 << (s[j] - 'a')
      • m[i] := key
    • ret := 0
    • i = 0 থেকে words.size()-1 পর্যন্ত:
      • j = i+1 থেকে words.size()-1 পর্যন্ত:
        • যদি (m[i] & m[j]) == 0, ret := max(ret, words[i].size() * words[j].size())
    • ret ফেরত দিন।

উদাহরণ (C++)

#include <bits/stdc++.h&g; using namespace std; class Solution {    public:    int getRev(int x){       int ret = 0;       for(int i = 0; i <= 25 ; i++){          if(!((x >> i) & 1)){             ret |= (1 << i);          }       }       return ret;    }    int maxProduct(vector<string>& words) {       unordered_map <int, int> m;       int n = words.size();       for(int i = 0; i < n; i++){          string s = words[i];          int key = 0;          for(int j = 0; j < s.size(); j++){             key |= 1 << (s[j] - 'a');          }          m[i] = key;       }       int ret = 0;       for(int i = 0; i < words.size(); i++){          for(int j = i + 1; j < words.size(); j++){             if((m[i] & m[j]) == 0){                //cout << i << " " << j << endl;                ret = max(ret, (int)words[i].size() * (int)words[j].size());             }          }       }       return ret;    } }; main(){    Solution ob;    vector<string> v = {"abcw","baz","foo","bar","xtfn","abcdef"};    cout << (ob.maxProduct(v)); }

ইনপুট

["abcw","baz","foo","bar","xtfn","abcdef"]

আউটপুট

16

  1. C++-এ BK ট্রি পরিচিতি

  2. C++-এ ট্রিতে দুটি অ-অন্তঃচ্ছেদী পথের সর্বোচ্চ গুণফল (Maximum product of two non-intersecting paths in a tree)

  3. অনিদেশিত গ্রাফে সাইকলের দৈর্ঘ্যের গুণফল C++-তে

  4. C++-এ LCM যা গুণফলের সমান হয় এমন সর্বোচ্চ দৈর্ঘ্যের সাবঅ্যারে