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

C++ में दो अपरकेस के बीच अधिकतम विशिष्ट लोअरकेस अक्षर

दिए गए स्ट्रिंग में दो अपर केस अक्षरों के बीच मौजूद अलग-अलग लोअर केस अक्षरों की अधिकतम संख्या ज्ञात करना कार्य को देखते हुए है।

आइए अब समझते हैं कि हमें एक उदाहरण का उपयोग करके क्या करना है -

इनपुट

str = “JKyubDoorG”

आउटपुट

3

स्पष्टीकरण

"yub" दो अपर केस अक्षर K और D के बीच मौजूद होता है जो गिनती 3 बनाता है।

"ऊर" भी दो बड़े अक्षरों डी और जी के बीच मौजूद है जो गिनती 2 को 'ओ' के रूप में दोहराता है और हम अलग अक्षरों की तलाश में हैं।

इसलिए, आउटपुट 3 है।

इनपुट

str = “ABcefsTaRpaep”

आउटपुट

4

निम्नलिखित कार्यक्रम में उपयोग किया गया दृष्टिकोण इस प्रकार है

  • फ़ंक्शन में अधिकतम () int आकार . प्रारंभ करें =s.length() दिए गए स्ट्रिंग की लंबाई को स्टोर करने के लिए।

  • i =0 से i<आकार तक लूप करें और जांचें कि क्या (s[i]>='A' &&s[i] <='Z')। अगर ऐसा है तो I increment में वृद्धि करें और तोड़ो;

  • int Ans . को इनिशियलाइज़ करें =0 अंतिम उत्तर और एक अन्य सरणी cnt[26] ={0}.

    . को संग्रहीत करने के लिए
  • i =0 से i<आकार तक लूप करें, फिर जांचें कि क्या (s[i]>='A' &&s[i] <='Z') वर्तमान वर्णमाला अपर केस में है या नहीं। अगर ऐसा है तो int CurrMax . को इनिशियलाइज़ करें =0 वर्तमान अधिकतम मूल्य को संग्रहीत करने के लिए।

  • i =0 से i<26 तक लूप करें और जांचें कि क्या (cnt[i]> 0) है। अगर ऐसा है, तो CurrMax बढ़ाएँ।

  • लूप के बाहर, उत्तरों update को अपडेट करें ans =max(ans, CurrMax) डालकर; और memset(cnt, 0, sizeof(cnt));

    का उपयोग करके cnt[] सरणी को रीसेट करें।
  • उपरोक्त if() कथन को बंद करें और जांचें कि क्या (s[i]>='a' &&s[i] <='z')। यदि ऐसा है तो वेतन वृद्धि cnt[s[i] - 'a'].

  • लूप के लिए बंद करें और उत्तर दें।

उदाहरण

#include <bits/stdc++.h>
using namespace std;
int Max(string s){
   int size = s.length();
   // Ignore the lowercase alphabets in beginning
   for (int i = 0; i < size; i++){
      if (s[i] >= 'A' && s[i] <= 'Z'){
         i++;
         break;
      }
   }
   int ans = 0;
   int cnt[26] = { 0 };
   for (int i = 0; i < size; i++) {
      // If alphabet is uppercase,
      if (s[i] >= 'A' && s[i] <= 'Z'){
         //Counting all lower case
         //distinct alphabets
         int CurrMax = 0;
         for (int i = 0; i < 26; i++){
            if (cnt[i] > 0)
               CurrMax++;
         }
         // Update ans
         ans = max(ans, CurrMax);
         // Reset count array
         memset(cnt, 0, sizeof(cnt));
      }
      // If alphabet is lowercase
      if (s[i] >= 'a' && s[i] <= 'z')
         cnt[s[i] - 'a']++;
   }
   return ans;
}
// Driver function
int main(){
   string str = "JKyubDoorG";
   cout << Max(str);
   return 0;
}

आउटपुट

3

  1. सी ++ में एक पेड़ में दो गैर-अंतर्विभाजक पथों का अधिकतम उत्पाद

    इस समस्या में, हमें n नोड्स के साथ एक अप्रत्यक्ष कनेक्टेड ट्री T दिया जाता है। हमारा कार्य C++ में एक ट्री में दो गैर-अंतर्विभाजकपथों के अधिकतम उत्पाद को खोजने के लिए एक प्रोग्राम बनाना है। समस्या का विवरण - एक पेड़ में दो अप्रतिच्छेदी पथों का अधिकतम गुणनफल ज्ञात करना। हम सभी गैर-दिलचस्प पथ खोजेंगे

  1. C++ में BST के दो नोड्स के बीच अधिकतम तत्व

    समस्या कथन एन तत्वों की एक सरणी और दो पूर्णांक ए, बी को देखते हुए जो दिए गए सरणी से संबंधित है। एआर [0] से एआर [एन -1] तक तत्व डालने से बाइनरी सर्च ट्री बनाएं। कार्य A से B तक के पथ में अधिकतम तत्व को खोजना है। उदाहरण यदि सरणी {24, 23, 15, 36, 19, 41, 25, 35} है तो हम निम्न प्रकार से BST बना सकते

  1. सी ++ प्रोग्राम ग्राफ में दो नोड्स के बीच पथ खोजने के लिए

    इस कार्यक्रम में हम दिए गए ग्राफ पर डीएफएस का उपयोग करके पता लगा सकते हैं कि क्या दो नोड्स के बीच पथ मौजूद है। एल्गोरिदम Begin    function isReach() is a recursive function to check whether d is reachable to s :    A) Mark all the vertices as unvisited.    B) Mark the c