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

C++ में समान संख्या में 0s, 1s और 2s के साथ सबस्ट्रिंग गिनें

हमें केवल 0, 1 और 2 वाले स्ट्रिंग स्ट्र दिए गए हैं। लक्ष्य स्ट्र के सभी सबस्ट्रिंग्स को खोजना है जिनमें 0 के 1 और 2 के बराबर संख्याएं हैं। यदि str "12012" है। 0, 1 और 2 के बराबर वाले सबस्ट्रिंग "120", "201" और "012" होंगे। गिनती 3 होगी।

आइए उदाहरणों से समझते हैं।

इनपुट - str="112200120"

आउटपुट −0s, 1s, और 2s की समान संख्या वाले सबस्ट्रिंग्स की संख्या है - 5

स्पष्टीकरण - सबस्ट्रिंग होंगे

str[0-5]=”112200”, str[1-6]=”122001”, str[5-7]=”012”, str[6-8]=”120”, str[7-0]=”201”

इनपुट - str="12012"

आउटपुट −0s, 1s, और 2s की समान संख्या वाले सबस्ट्रिंग्स की संख्या हैं:3

स्पष्टीकरण - सबस्ट्रिंग होंगे -

str[0-2]=”120” , str[1-3]=”201”, str[2-4]=”012”

नीचे दिए गए प्रोग्राम में इस्तेमाल किया गया तरीका इस प्रकार है

  • पूर्णांक मानों की एक स्ट्रिंग लें और एक स्ट्रिंग की लंबाई की गणना करें

  • आगे की प्रक्रिया के लिए डेटा को फ़ंक्शन में पास करें।

  • 0, 1 और 2 की समान संख्या वाले सबस्ट्रिंग की संख्या को संग्रहीत करने के लिए एक अस्थायी चर गणना करें।

  • मानचित्र प्रकार का एक चर बनाएं जो जोड़े को दी गई संख्याओं की आवृत्तियों पर मैप कर रहा हो।

  • 1 जोड़ी (0,0) पर स्टोर करें और 0 से स्ट्रिंग की लंबाई तक के लिए लूप प्रारंभ करें।

  • लूप के अंदर, IF str[i] =0 की जांच करें, फिर 0 के लिए गिनती बढ़ाएं, ELSE IF str[i] =1 फिर 1 के लिए गिनती बढ़ाएं, ELSE 2 के लिए गिनती बढ़ाएं।

  • 0 और 1 से 0 - 1 और 0 और 2 से 0 - 2 सेट करें।

  • ज़ीरो_वन और ज़ीरो_ट्वो की एक जोड़ी बनाएं और काउंट को काउंट + मैप_पेयर ऑफ़ डिफरेंस वैल्यू के रूप में सेट करें, जिसकी गणना जोड़े बनाकर की जाती है।

  • map_pair को 1 से बढ़ाएँ।

  • वापसी की संख्या

  • परिणाम प्रिंट करें।

उदाहरण

#include <bits/stdc++.h>
using namespace std;
int count_string(string str_1, int length_str1, string str_2, int length_str2){
   int count = INT_MAX;
   int arr_1[26] = { 0 };
   int arr_2[26] = { 0 };
   for (int i = 0; i < length_str1; i++){
      arr_1[str_1[i] - 'a']++;
   }
   for (int i = 0; i < length_str2; i++){
      arr_2[str_2[i] - 'a']++;
   }
   int alphabets = 26;
   for (int i = 0; i < alphabets; i++){
      if(arr_2[i]){
         count = min(count, arr_1[i] / arr_2[i]);
      }
   }
   return count;
}
int main(){
   string str_1 = "knowledge", str_2 = "know";
   int length_str1 = str_1.size();
   int length_str2 = str_2.size();
   cout<<"Count occurrences of a string that can be constructed from another given string are: "<<count_string(str_1,length_str1, str_2, length_str2);
   return 0;
}

आउटपुट

यदि हम उपरोक्त कोड चलाते हैं तो यह निम्न आउटपुट उत्पन्न करेगा -

Count of Substrings with equal number of 0s, 1s and 2s are: 1

  1. सी ++ में सम और विषम उत्पाद के साथ ऑर्डर किए गए जोड़े की संख्या की गणना करें

    हमें n धनात्मक संख्याओं की एक सरणी दी गई है। लक्ष्य arr[x] और arr के गुणनफल के साथ क्रमबद्ध जोड़े (arr[x], arr[y]) को गिनना है [y] सम या विषम है। जोड़ी (arr[i],arr[j] ) और (arr[j],arr[i] को अलग से गिना जाता है। हम प्रत्येक जोड़े की संख्या के लिए दो for लूप का उपयोग करके सरणी को पार करेंगे। अब उत्पा

  1. C++ में अनुमत डुप्लिकेट के साथ दी गई संख्या के बराबर उत्पाद के साथ ट्रिपल की संख्या की गणना करें

    हमें संख्याओं की एक सरणी के साथ दिया गया है Arr[]। लक्ष्य उन त्रिकों की संख्या गिनना है जिनका गुणनफल दी गई संख्या p के बराबर है। समान मान लेकिन भिन्न तत्वों वाले एक से अधिक त्रिक हो सकते हैं। उदाहरण के लिए, (1,2,3) और (3,1,2) सरणी [1,2,3,1,2] में अलग-अलग के रूप में गिना जाएगा यदि तत्व अलग हैं लेकिन

  1. C++ में बिटवाइज़ और इक्वल टू ज़ीरो के साथ ट्रिपल्स

    मान लीजिए कि हमारे पास पूर्णांक A की एक सरणी है। हमें सूचकांकों (i, j, k) के त्रिगुणों की संख्या इस प्रकार ज्ञात करनी है कि - 0 <=i <ए का आकार 0 <=j