दिया गया कार्य एक दी गई बाइनरी स्ट्रिंग से एक उप-स्ट्रिंग ढूंढना और फिर शून्य और एक की संख्या के बीच अधिकतम अंतर ढूंढना है।
उदाहरण
इनपुट
str = "10010110"
आउटपुट
2
व्याख्या
पोजीशन 1 से 4 ("0010") की उप-सरणी में, शून्य और एक के बीच अंतर = 3 - 1 = 2 जो पाया जा सकने वाला अधिकतम है।
इनपुट
str = "00000"
आउटपुट
5
नीचे दिए गए प्रोग्राम में उपयोग किया गया दृष्टिकोण इस प्रकार है
- main() फ़ंक्शन में बाइनरी स्ट्रिंग संग्रहीत करने के लिए एक स्ट्रिंग str बनाएं। साथ ही एक सरणी int arr[str.length()+1] घोषित करें।
- memset(arr,0,sizeof(arr)) का उपयोग करके arr[] के सभी तत्व 0 पर सेट करें।
- j = 1 से j <= str.length() तक लूप करें।
- जांचें कि क्या (memset(arr,0,sizeof(arr)), यदि हां तो arr[j]=max(arr[j-1]-1,-1) रखें।
- अन्यथा arr[j]=max(arr[j-1]+1,1) रखें।
- लूप के बाहर *max_element(arr+1, arr+str.length()+1) का उपयोग करके अधिकतम संख्या प्रिंट करें।
कार्यक्रम उदाहरण
#include<bits/stdc++.h>
using namespace std;
int main(){
string str = "10010110";
int arr[str.length()+1];
memset(arr,0,sizeof(arr));
for(int j=1;j<=str.length();j++){
if(str[j-1]=='1')
arr[j]=max(arr[j-1]-1,-1);
else
arr[j]=max(arr[j-1]+1,1);
}
cout << *max_element(arr+1,arr+str.length()+1);
return 0;
}
आउटपुट
2