हमें इनपुट के रूप में दो स्ट्रिंग्स str_1 और str_2 दिए गए हैं। लक्ष्य स्ट्रिंग की संख्या को str_2 के समान खोजना है जिसे str_1 से चुने गए अक्षरों का उपयोग करके बनाया जा सकता है जिसमें से प्रत्येक वर्ण का उपयोग केवल एक बार किया जाता है।
नोट − दोनों में सभी अक्षर एक ही स्थिति में हैं।
आइए उदाहरणों से समझते हैं।
इनपुट − str_1 ="abcaaaabca", str_2 ="bca";
आउटपुट - एक स्ट्रिंग की आवृत्ति की गणना करें जिसे किसी अन्य दिए गए स्ट्रिंग से बनाया जा सकता है:2
स्पष्टीकरण − str_a में bca सबस्ट्रिंग −
str_1[1-3]=”bca” and str[7-9]=”bca”
इनपुट − str_1 ="के बारे में", str_2 ="cout";
आउटपुट - एक स्ट्रिंग की गणना आवृत्तियां जो किसी अन्य दिए गए स्ट्रिंग से बनाई जा सकती हैं - 0
स्पष्टीकरण - सबस्ट्रिंग cout str_a में मौजूद नहीं है।
नीचे दिए गए प्रोग्राम में इस्तेमाल किया गया तरीका इस प्रकार है
हम पहले str_1 में सभी अक्षरों की आवृत्ति की गणना करेंगे और इसे सरणी arr_1[26] में संग्रहीत करेंगे और arr_2 में सभी वर्णों की आवृत्ति को arr_2[26] में संग्रहीत करेंगे।
-
दो तार 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] और 0 के साथ arr_2 में वर्णों की आवृत्ति के लिए arr_2[26] प्रारंभ करें।
-
arr_1 और arr_2 में लूप और अपडेट फ़्रीक्वेंसी का उपयोग करके str_1 और str_2 दोनों को पार करें।
-
अब लूप के लिए फिर से arr_2 का उपयोग करें और यदि वर्तमान आवृत्ति arr_2[i] शून्य नहीं है तो न्यूनतम गणना (पिछला मान) और arr_1[i]/arr_2[i] (str_1 से प्रत्येक वर्ण को str_2 के प्रत्येक वर्ण के लिए केवल एक बार लेना) ।
-
अंत में, गिनती में 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