আমাদের ইনপুট হিসাবে দুটি স্ট্রিং str_1 এবং str_2 দেওয়া হয়েছে। লক্ষ্য হল str_2 এর মতো স্ট্রিংগুলির গণনা খুঁজে বের করা যা str_1 থেকে বাছাই করা অক্ষর ব্যবহার করে তৈরি করা যেতে পারে যেখান থেকে প্রতিটি অক্ষর একবার ব্যবহার করা হয়েছে।
দ্রষ্টব্য − উভয়ের সমস্ত বর্ণমালা একই ক্ষেত্রে।
আসুন উদাহরণ দিয়ে বুঝতে পারি।
ইনপুট − str_1 ="abcaaaabca", str_2 ="bca";
আউটপুট − একটি স্ট্রিংয়ের ঘটনাগুলি গণনা যা অন্য প্রদত্ত স্ট্রিং থেকে তৈরি করা যেতে পারে:2
ব্যাখ্যা − str_a −
-এ সাবস্ট্রিং bcastr_1[1-3]=”bca” and str[7-9]=”bca”
ইনপুট − str_1 ="সম্পর্কে", str_2 ="cout";
আউটপুট − একটি স্ট্রিংয়ের ঘটনা গণনা যা অন্য প্রদত্ত স্ট্রিং থেকে তৈরি করা যেতে পারে − 0
ব্যাখ্যা − সাবস্ট্রিংগুলি str_a-তে উপস্থিত নয়৷
৷নিচের প্রোগ্রামে ব্যবহৃত পদ্ধতিটি নিম্নরূপ
আমরা প্রথমে str_1-এ সমস্ত বর্ণমালার ফ্রিকোয়েন্সি গণনা করব এবং অ্যারে arr_1[26] এ সংরক্ষণ করব এবং অ্যারে arr_2[26]-এ arr_2-এ সমস্ত বর্ণমালার ফ্রিকোয়েন্সি সংরক্ষণ করব।
-
str_1 এবং str_2 দুটি স্ট্রিং নিন। str_1.size() এবংstr_2.size() হিসাবে দৈর্ঘ্য গণনা করুন।
-
ফাংশন count_string(string str_1, int len_str_1, string str_2, int len_str_2) স্ট্রিং এবং দৈর্ঘ্য উভয়ই নেয় এবং str_2 স্ট্রিংগুলির একটি সংখ্যা প্রদান করে যা str_1 থেকে তৈরি করা যেতে পারে।
-
INT_MAX হিসাবে প্রাথমিক গণনা নিন।
-
str_1-এ অক্ষরের ফ্রিকোয়েন্সি arr_1[26] এবং arr_2-এ 0 সহ অক্ষরের ফ্রিকোয়েন্সির জন্য arr_2[26] দুটি অ্যারে শুরু করুন।
-
লুপ এবং আপডেট ফ্রিকোয়েন্সি arr_1 এবং arr_2 ব্যবহার করে str_1 এবং str_2 উভয়ই অতিক্রম করুন।
-
এখন আবার লুপের জন্য arr_2 ব্যবহার করুন এবং বর্তমান ফ্রিকোয়েন্সি arr_2[i] যদি শূন্য না হয় তবে ন্যূনতম গণনা (আগের মান) এবং arr_1[i]/arr_2[i] ( str_2 এর প্রতিটি অক্ষরের জন্য str_1 থেকে প্রতিটি বর্ণমালা শুধুমাত্র একবার গ্রহণ করুন) .
-
শেষ পর্যন্ত, গণনায় str_1 এবং str_2 এর মিলিত সংশ্লিষ্ট অক্ষরের ন্যূনতম মান থাকবে। উদাহরণ aaabbbb (a=3,b=4) এবং abb(a=1,b=2) সর্বনিম্ন গণনা হবে 1
-
পছন্দসই ফলাফল হিসাবে সমস্ত লুপের শেষে গণনা করুন।
উদাহরণ
#include <bits/stdc++.h> using namespace std; int count_string(string str_1, int length_str_1, string str_2, int length_str_2){ int count = INT_MAX; int arr_1[26] = { 0 }; int arr_2[26] = { 0 }; for (int i = 0; i < length_str_1; i++){ arr_1[str_1[i] - 'a']++; } for (int i = 0; i < length_str_2; i++){ arr_2[str_2[i] - 'a']++; } int total_alphabets = 26; for (int i = 0; i < total_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_str_1 = str_1.size(); int length_str_2 = str_2.size(); cout<<"Count occurrences of a string that can be constructed from another given string are: "<<count_string(str_1,length_str_1, str_2, length_str_2); return 0; }
আউটপুট
যদি আমরা উপরের কোডটি চালাই তবে এটি নিম্নলিখিত আউটপুট −
উৎপন্ন করবেCount occurrences of a string that can be constructed from another given string are: 1