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

सी ++ में बाइनरी स्ट्रिंग में शून्य और वाले का अधिकतम अंतर

कार्य को देखते हुए किसी दिए गए बाइनरी स्ट्रिंग से एक उप-स्ट्रिंग और फिर शून्य और एक की संख्या के बीच अधिकतम अंतर खोजना है।

आइए अब एक उदाहरण का उपयोग करके समझते हैं कि हमें क्या करना है -

इनपुट

str = “100100110”

आउटपुट

2

स्पष्टीकरण

उप-सरणी में स्थिति 1 से 5 ("00100") में, शून्य और वाले के बीच का अंतर =4 - 1 =3 जो अधिकतम पाया जा सकता है।

इनपुट

str = “00000”

आउटपुट

5

निम्नलिखित कार्यक्रम में उपयोग किया गया दृष्टिकोण इस प्रकार है

  • मुख्य () फ़ंक्शन में एक स्ट्रिंग बनाएं str बाइनरी स्ट्रिंग को स्टोर करने के लिए। आकार . को स्टोर करने के लिए परिवर्तनीय int आकार भी प्रारंभ करें स्ट्रिंग की और दोनों को अधिकतम () फ़ंक्शन में पास करें।

  • मैक्स () फ़ंक्शन में, पहले जांचें कि क्या सभी तत्व एक () फ़ंक्शन को कॉल करके 1 हैं।

  • बूल प्रकार का वन() फ़ंक्शन बनाएं और इसके अंदर एक चर int O =0 बनाएं।

  • i =0 से i

  • लूप के बाहर, जांचें कि क्या (ओ ==आकार)। अगर ऐसा है, तो सही लौटें।

  • मैक्स () फ़ंक्शन में वापस यदि वन () फ़ंक्शन सही लौटा, तो उत्तर के रूप में -1 लौटाएं।

  • अन्यथा लंबाई ज्ञात करने के लिए आगे बढ़ें। एक ऐरे को इनिशियलाइज़ करें a[100] ={ 0 }।

  • i =0 से i<आकार तक लूप करें और a[i] =(str[i] =='0' ? 1:-1) डालें और str के प्रत्येक तत्व को इस प्रकार जांचें।

  • लूप के बाहर, एक और सरणी int arr [100] [3] को इनिशियलाइज़ करें और इसके सभी तत्वों को -1 से बदलें memset(arr, -1, sizeof arr) का उपयोग करें और अंत में Length(a, str, size, 0, 0, arr) को कॉल करें।

  • Length() फ़ंक्शन में, पहले जांचें कि क्या (i>=size), यदि ऐसा है, तो इसका मतलब है कि स्ट्रिंग खत्म हो गई है और 0.

  • फिर जांचें कि क्या (गिरफ्तारी [i] [एस]! =-1)। अगर ऐसा है, तो इसका मतलब है कि राज्य की पहले से ही गणना की जा चुकी है और वापसी गिरफ्तारी [i][s]।

  • फिर जांचें कि क्या (एस ==0) है। यदि ऐसा है, तो वापसी एआर [i] [एस] =अधिकतम (ए [i] + लंबाई (ए, स्ट्र, आकार, आई +1, 1, एआर), लंबाई (ए, स्ट्र, आकार, आई + 1, 0 , गिरफ्तार));

  • अन्यथा वापसी गिरफ्तारी [i] [एस] =अधिकतम (ए [i] + लंबाई (ए, स्ट्र, आकार, आई + 1, 1, एआर), 0);

उदाहरण

#include <bits/stdc++.h>
using namespace std;
bool One(string str, int size){
   int O = 0;
   for (int i = 0; i < str.size(); i++)
      O += (str[i] == '1');
   return (O == size);
}
int Length(int a[], string str, int size,
int i, int s, int arr[][3]){
   // If string is over.
   if (i >= size)
      return 0;
      // If the already calculated.
   if (arr[i][s] != -1)
      return arr[i][s];
   if (s == 0)
      return arr[i][s] = max(a[i] +
      Length(a, str, size, i + 1, 1, arr),
      Length(a, str, size, i + 1, 0, arr));
   else
      return arr[i][s] = max(a[i] +
      Length(a, str, size, i + 1, 1, arr), 0);
}
int Max(string str, int size){
   // Checking if all elements are 1
   if (One(str, size))
      return -1;
      // Finding length
   int a[100] = { 0 };
   for (int i = 0; i < size; i++)
      a[i] = (str[i] == '0' ? 1 : -1);
      int arr[100][3];
      memset(arr, -1, sizeof arr);
   return Length(a, str, size, 0, 0, arr);
}
// main function
int main(){
   string str = "100100110";
   int size = 9;
   cout << Max(str, size);
   return 0;
}

आउटपुट

3

  1. सी++ में नोड और पूर्वज के बीच अधिकतम अंतर

    मान लीजिए कि हमारे पास एक बाइनरी ट्री की जड़ है, हमें अधिकतम मान V ज्ञात करना है जिसके लिए अलग-अलग नोड A और B मौजूद हैं जहाँ V =| A का मान - B का मान | और A, B का पूर्वज है। इसलिए यदि पेड़ जैसा है - तब आउटपुट 7 होगा। पूर्वज नोड अंतर [(8 - 3), (7 - 3), (8 - 1), (10-13)] की तरह हैं, उनमें से (8

  1. C++ स्ट्रिंग स्थिरांक और वर्ण स्थिरांक के बीच अंतर

    C++ में, सिंगल कोट्स में एक कैरेक्टर एक कैरेक्टर लिटरल होता है। यह चार प्रकार का है। उदाहरण के लिए, ए ASCII आधारित सिस्टम पर 97 के मान के साथ चार प्रकार का है। दोहरे उद्धरण चिह्नों में एक वर्ण या वर्णों की एक स्ट्रिंग एक स्ट्रिंग अक्षर का प्रतिनिधित्व करती है। यह प्रकार का है const char[] और स्ट्रि

  1. C++ में रिलेशनल ऑपरेटर(==) और std::string::compare() के बीच अंतर

    रिलेशनल ऑपरेटर ==और std::string::compare() के बीच केवल एक अंतर है। वह वापसी मूल्य है। आंतरिक रूप से, string::operator==() string::compare() using का उपयोग कर रहा है रिलेशनल ऑपरेटर(==) एक बूलियन लौटाता है जो यह दर्शाता है कि 2 तार बराबर हैं या नहीं, जबकि तुलना एक पूर्णांक देता है जो दर्शाता है कि तार