Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> C++

C++ में शब्द की लंबाई का अधिकतम उत्पाद

मान लीजिए कि हमारे पास शब्द नामक एक स्ट्रिंग सरणी है, लंबाई (शब्द [i]) * लंबाई (शब्द [जे]) का अधिकतम मान ज्ञात करें जहां दो शब्द सामान्य अक्षरों को साझा नहीं करेंगे। हम मान सकते हैं कि प्रत्येक शब्द में केवल छोटे अक्षर होंगे। यदि ऐसे कोई दो शब्द मौजूद नहीं हैं, तो 0 लौटाएं। इसलिए यदि इनपुट ["abcw", "baz", "foo", "bar", "xtfn", "abcdef"] जैसा है, तो आउटपुट 16 होगा, क्योंकि दो शब्द "abcw", "xtfn" हो सकते हैं।

इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -

  • getRev() नामक एक विधि को परिभाषित करें, यह x को इनपुट के रूप में लेगा

  • रिट:=0

  • मेरे लिए 0 से 25 की सीमा में

    • अगर x / (2^i) सम है, तो ret :=ret या 2^i

  • वापसी रिट

  • मुख्य विधि से, निम्न कार्य करें -

  • एक नक्शा बनाएं m n :=शब्द सरणी का आकार

  • मेरे लिए 0 से n - 1 की सीमा में

    • एस:=शब्द [i], कुंजी:=0

    • j के लिए 0 से s के आकार की सीमा में

      • कुंजी:=कुंजी या 2^(s[j] - 'a' का ASCII)
    • एम [i] :=कुंजी

  • रिट:=0

  • मेरे लिए 0 से लेकर शब्दों के आकार तक - 1

    • j श्रेणी के लिए i + 1 शब्दों का आकार – 1

      • यदि m[i] और m[j] =0, तो ret :=शब्द का अधिकतम आकार [i] * शब्द का आकार[j]

  • वापसी रिट

उदाहरण(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. सी++ में बीके ट्री परिचय

    बीके ट्री या बर्कहार्ड ट्री एक डेटा संरचना का एक रूप है जो आमतौर पर लेवेनशेटिन दूरी के आधार पर वर्तनी जांच करने के लिए उपयोग किया जाता है। इसका उपयोग स्ट्रिंग मिलान के लिए भी किया जाता है स्वत:सुधार सुविधा का उपयोग इस डेटा संरचना को बनाने के लिए किया जा सकता है। मान लीजिए कि हमारे पास एक शब्दकोश में

  1. सी ++ में एक पेड़ में दो गैर-अंतर्विभाजक पथों का अधिकतम उत्पाद

    इस समस्या में, हमें n नोड्स के साथ एक अप्रत्यक्ष कनेक्टेड ट्री T दिया जाता है। हमारा कार्य C++ में एक ट्री में दो गैर-अंतर्विभाजकपथों के अधिकतम उत्पाद को खोजने के लिए एक प्रोग्राम बनाना है। समस्या का विवरण - एक पेड़ में दो अप्रतिच्छेदी पथों का अधिकतम गुणनफल ज्ञात करना। हम सभी गैर-दिलचस्प पथ खोजेंगे

  1. C++ में एक अप्रत्यक्ष ग्राफ में सभी चक्रों की लंबाई का गुणनफल

    हमें इनपुट के रूप में अप्रत्यक्ष के साथ-साथ बिना भार वाले ग्राफ दिए गए हैं और कार्य दिए गए चक्रों के उत्पाद को खोजना और परिणाम प्रदर्शित करना है। उदाहरण इनपुट दी गई आकृति में, 8 नोड हैं और उनमें से 5 नोड 1, 6, 3, 5, 8 सहित चक्र बना रहे हैं और शेष नोड चक्र में शामिल नहीं हैं। तो, चक्र की लंबाई 5