দেওয়া কাজ হচ্ছে একটি বাইনারি স্ট্রিং-এ থেকে একটি সাব-স্ট্রিং বের করা এবং তারপর শূন্য এবং একের সংখ্যার ম্যাক্সিমাম পার্থক্য বের করা।
উদাহরণ দিয়ে বুঝি −
ইনপুট
str = "10010110"
আউটপুট
2
ব্যাখ্যা
পজিশন ১ থেকে ৪-এ সাব-অ্যারে ("0010")-এ, শূন্য এবং একের পার্থক্য = ৩ - ১ = ২ যা সর্বোচ্চ পাওয়া যায়।
ইনপুট
str = "00000"
আউটপুট
5
নিচের প্রোগ্রামে ব্যবহৃত পদ্ধতি নিম্নরূপ
main() ফাংশনে একটি স্ট্রিং str তৈরি করা হয় বাইনারি স্ট্রিং সংরক্ষণের জন্য। এছাড়া একটি অ্যারে int arr[str.length()+1] ডিক্লেয়ার।
arr[]-এর সব এলিমেন্ট ০ সেট করা হয় memset(arr,0,sizeof(arr)); দিয়ে।
j = 1 থেকে j<= str.length() পর্যন্ত লুপ।
চেক করা হয় if(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