Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> C++

C++ में अधिकतम k बार आने वाले प्रत्येक वर्ण के साथ सबस्ट्रिंग की गणना करें

हमें एक स्ट्रिंग str दिया जाता है। लक्ष्य उन सबस्ट्रिंग की संख्या को गिनना है जिसमें प्रत्येक वर्ण अधिकतम k बार होता है। उदाहरण के लिए यदि इनपुट "एबीसी" और के =1 है, तो सबस्ट्रिंग "ए", "बी", "सी", "एबी", "बीसी", "एबीसी" होगी।

आइए उदाहरणों से समझते हैं।

इनपुट - str="abaefgf"

आउटपुट - समान प्रथम और अंतिम वर्णों वाले सबस्ट्रिंग की संख्या है &mmius; 9

स्पष्टीकरण - सबस्ट्रिंग होंगे

“a”, “b”, “a”, “e” ,”f”, “g”, “f”, “aba”, “fgf”. Total 9.

इनपुट - str="abcdef"

आउटपुट − समान प्रथम और अंतिम वर्णों वाले सबस्ट्रिंग की संख्या है:6

स्पष्टीकरण - सबस्ट्रिंग होंगे -

“a” , “b” , “c”, “d”, “e” ,”f”. Total 6

नीचे दिए गए प्रोग्राम में इस्तेमाल किया गया तरीका इस प्रकार है

दी गई समस्या को हल करने के लिए कई दृष्टिकोण हो सकते हैं, अर्थात् सरल दृष्टिकोण और कुशल दृष्टिकोण। तो आइए पहले भोले दृष्टिकोण को देखें। हम प्रत्येक लंबाई के सबस्ट्रिंग को फ़ंक्शन चेक () में पास करेंगे। यदि वह विकल्प एक ही वर्ण से शुरू और समाप्त होता है तो गिनती बढ़ाएँ।

  • स्ट्रिंग स्ट्र लें। लंबाई की गणना str.size() के रूप में करें।

  • फ़ंक्शन चेक (स्ट्रिंग स्ट्र) सबस्ट्रिंग स्ट्र लेता है और जांचता है कि क्या यह पहला और अंतिम वर्ण समान है। ( str[0]==str[length-1] )। अगर सही है, तो वापस लौटें 1.

  • फ़ंक्शन check_Start_End(string str, int length) इनपुट के रूप में str और उसकी लंबाई लेता है और str के सबस्ट्रिंग की गिनती देता है जो एक ही वर्ण से शुरू और समाप्त होता है।

  • प्रारंभिक गणना 0 के रूप में लें।

  • लूप के लिए दो का उपयोग करके ट्रैवर्स स्ट्र। i=0 से i<लंबाई और आंतरिक j=1 से j=length-1 तक।

  • हम सभी लंबाई के सबस्ट्रिंग (i, j) का उपयोग करके सभी सबस्ट्रिंग प्राप्त करेंगे। चेक करने के लिए प्रत्येक सबस्ट्रिंग पास करें ()। यदि यह 1 लौटाता है, तो वृद्धि की संख्या।

  • दोनों के अंत में लूप की गिनती में समान प्रारंभ और अंत वर्ण के साथ str के कई सबस्ट्रिंग होंगे।

  • वांछित परिणाम के रूप में वापसी की गणना करें।

उदाहरण

#include <bits/stdc++.h>
using namespace std;
int count_k(string str, int len, int k){
   int count = 0;
   int arr[26];
   for (int i = 0; i < len; i++){
      memset(arr, 0, sizeof(arr));
      for (int j = i; j < len; j++){
         arr[str[j] - 'a']++;
         if (arr[str[j] - 'a'] <= k)
            { count++; }
         else
            { break; }
      }
   }
   return count;
}
int main(){
   string str = "bbddehj";
   int k = 1;
   int length = str.length();
   cout<<"Count of substrings with each character occurring at most k times are: "<<count_k(str,
length, k);
   return 0;
}

आउटपुट

यदि हम उपरोक्त कोड चलाते हैं तो यह निम्न आउटपुट उत्पन्न करेगा -

Count of substrings with each character occurring at most k times are: 14

  1. C++ में कुल n अंक के साथ m कोलिनियर वाले त्रिभुजों की संख्या

    हमें दो चर n और m दिए गए हैं जो एक 2D तल पर बिंदुओं की संख्या को निरूपित करते हैं। n बिंदुओं में से, m बिंदु संरेख हैं। लक्ष्य इन n बिंदुओं का उपयोग करके बनाए जा सकने वाले त्रिभुजों की संख्या ज्ञात करना है। समरेख बिंदु - एक ही रेखा पर स्थित बिंदु संरेख कहलाते हैं। बिंदु A और B संरेख हैं। दिया गय

  1. C++ में सबसे अधिक पानी वाला कंटेनर

    हमें कंटेनर की दीवारों की ऊंचाई की एक सरणी दी गई है। लक्ष्य उस कंटेनर को ढूंढना है जिसमें पानी की अधिकतम मात्रा हो सकती है। चूंकि दीवारों की ऊंचाई एक सरणी के तत्व हैं, उनके बीच की दूरी को दो दीवारों के बीच की चौड़ाई के रूप में माना जाता है। उदाहरण के लिए, Arr[i] और Arr[j] की दीवारों के बीच j-i चौड़ा

  1. isprint () C++ के साथ कार्य करना

    C++ में Isprint() cctype.h हेडर फाइल में इनबिल्ट फंक्शन है जो जांचता है कि कैरेक्टर प्रिंट करने योग्य है या नहीं। इस्प्रिंट निरंतर मामलों के लिए सही लौटाता है क्योंकि इसप्रिंट हाउस कैरेक्टर ( ) से अलग है, जो सच हो जाता है। इस फ़ंक्शन का एक स्थानीय-विशिष्ट मॉडल संस्करण (Isprint) cctype हेडर फ़ाइल म