কম্পিউটার টিউটোরিয়াল

C++-এ বাইনারি স্ট্রিং-এ শূন্য এবং একের ম্যাক্সিমাম পার্থক্য


দেওয়া কাজ হচ্ছে একটি বাইনারি স্ট্রিং-এ থেকে একটি সাব-স্ট্রিং বের করা এবং তারপর শূন্য এবং একের সংখ্যার ম্যাক্সিমাম পার্থক্য বের করা।

উদাহরণ দিয়ে বুঝি −

ইনপুট

str = "100100110"

আউটপুট

2

ব্যাখ্যা

পজিশন ১ থেকে ৫-এ সাব-অ্যারে ("00100")-এ, শূন্য এবং একের পার্থক্য = ৪ - ১ = ৩ যা সর্বোচ্চ পাওয়া যায়।

ইনপুট

str = "00000"

আউটপুট

5

নিচের প্রোগ্রামে ব্যবহৃত পদ্ধতি নিম্নরূপ

  • main() ফাংশনে একটি স্ট্রিং str তৈরি করা হয় বাইনারি স্ট্রিং সংরক্ষণের জন্য। এছাড়া int size ভেরিয়েবল স্ট্রিং-এর size সংরক্ষণের জন্য এবং দুটোই Max() ফাংশনে পাস করা হয়।

  • Max() ফাংশনে প্রথমে চেক করা হয় সব এলিমেন্ট ১ কিনা One() ফাংশন কল করে।

  • One() ফাংশন bool টাইপের তৈরি করা হয় এবং এর ভিতরে int O = 0 ভেরিয়েবল।

  • i = 0 থেকে i< str.size() পর্যন্ত লুপ করে যদি str[i] == 1 হয় তবে O-এ ১ যোগ।

  • লুপের বাইরে, চেক করা হয় if(O == size)। যদি সত্য হয় তবে true রিটার্ন।

  • Max() ফাংশনে ফিরে, যদি One() ফাংশন true রিটার্ন করে, তবে -1 রিটার্ন করা হয় উত্তর হিসেবে।

  • অন্যথায় দৈর্ঘ্য বের করতে आगे বড়ুন। int a[100] = { 0 } অ্যারে ইনিশিয়ালাইজ।

  • i = 0 থেকে i< size পর্যন্ত লুপ করে a[i] = (str[i] == '0' ? 1 : -1) রাখা হয় এবং স্ট্রিং-এর প্রতিটি এলিমেন্ট চেক।

  • লুপের বাইরে, আরেকটি অ্যারে int arr[100][3] এবং এর সব এলিমেন্ট -1 দিয়ে রিপ্লেস করা হয় memset(arr, -1, sizeof arr) এবং শেষে Length(a, str, size, 0, 0, arr) কল।

  • Length() ফাংশনে, প্রথমে চেক করা হয় if (i >= size), যদি সত্য হয় তবে স্ট্রিং শেষ এবং ০ রিটার্ন।

  • তারপর চেক করা হয় if (arr[i][s] != -1)। যদি সত্য হয় তবে স্টেট ইতিমধ্যে ক্যালকুলেটেড এবং arr[i][s] রিটার্ন।

  • তারপর চেক করা হয় if(s == 0)। যদি সত্য হয় তবে রিটার্ন arr[i][s] = max(a[i] + Length(a, str, size, i + 1, 1, arr), Length(a, str, size, i + 1, 0, arr));

  • অন্যথায় রিটার্ন arr[i][s] = max(a[i] + Length(a, str, size, i + 1, 1, arr), 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. C++-এ Maximum Difference Between Node and Ancestor

  2. C/C++-এ strncmp() এবং strcmp()-এর পার্থক্য

  3. C++ স্ট্রিং কনস্ট্যান্ট এবং ক্যারেক্টার কনস্ট্যান্টের পার্থক্য

  4. C++-এ রিলেশনাল অপারেটর (==) এবং std::string::compare() এর পার্থক্য