আমাদের একটি স্ট্রিং str দেওয়া আছে যাতে শুধু ০, ১, ২ রয়েছে। লক্ষ্য হলো str-এর সব সাবস্ট্রিং যাতে ০, ১, ২-এর সংখ্যা সমান, তাদের বের করা। যদি str = "12012" হয়, সাবস্ট্রিং: "120", "201", "012"। মোট ৩টি।
উদাহরণ দিয়ে বুঝি
ইনপুট − str="112200120"
আউটপুট − ০, ১, ২ সমান সংখ্যা বিশিষ্ট সাবস্ট্রিং: ৫
ব্যাখ্যা − সাবস্ট্রিং:
str[0-5]="112200", str[1-6]="122001", str[5-7]="012", str[6-8]="120", str[7-0]="201"
ইনপুট − str="12012"
আউটপুট − ০, ১, ২ সমান সংখ্যা বিশিষ্ট সাবস্ট্রিং: ৩
ব্যাখ্যা − সাবস্ট্রিং:
str[0-2]="120", str[1-3]="201", str[2-4]="012"
প্রোগ্রামে ব্যবহৃত পদ্ধতি
- স্ট্রিং নিন এবং দৈর্ঘ্য বের করুন। ফাংশনে পাস করুন।
- অস্থায়ী ভেরিয়েবল
countসাবস্ট্রিং কাউন্ট রাখতে। mapটাইপ ভেরিয়েবল নিন যা পেয়ারকে ফ্রিকোয়েন্সি ম্যাপ করবে।(0,0)পেয়ারে ১ স্টোর করুন এবংi=0থেকেlengthপর্যন্ত লুপ চালান।- লুপের ভিতরে:
str[i]=='0'হলে ০-র কাউন্ট বাড়ান,'1'হলে ১-র, অন্যথায় ২-র। zero_one = zero - oneএবংzero_two = zero - twoসেট করুন।(zero_one, zero_two)পেয়ার বানিয়েcount += map[pair]করুন।- ম্যাপে পেয়ারের ফ্রিকোয়েন্সি ১ বাড়ান।
countরিটার্ন করুন।- ফলাফল প্রিন্ট করুন।
উদাহরণ
#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