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

बैलेंस्ड स्ट्रिंग के लिए सबस्ट्रिंग को C++ में बदलें

मान लीजिए हमारे पास एक स्ट्रिंग है जिसमें केवल 4 प्रकार के वर्ण 'Q', 'W', 'E' और 'R' हैं। एक स्ट्रिंग संतुलित होगी यदि उसका प्रत्येक वर्ण n/4 बार प्रकट होता है जहाँ n स्ट्रिंग की लंबाई है। सबस्ट्रिंग की न्यूनतम लंबाई ज्ञात करें जिसे मूल स्ट्रिंग को संतुलित करने के लिए समान लंबाई के किसी भी अन्य स्ट्रिंग के साथ प्रतिस्थापित किया जा सकता है। तो अगर s ="QQWE", तो आउटपुट 1 होगा। ऐसा इसलिए है क्योंकि हम Q को R से बदल सकते हैं, ताकि "RQWE", जो संतुलित हो।

यदि स्ट्रिंग पहले से ही संतुलित है तो 0 लौटाएं।

इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -

  • एक नक्शा मी बनाएं
  • s में प्रत्येक वर्ण के लिए, वर्णों की आवृत्ति को मानचित्र में संग्रहीत करें, n :=s का आकार
  • res :=n, लेफ्ट :=0
  • 0 से n - 1 की सीमा में दाएं के लिए
    • m[s[right]] को 1 से कम करें
    • बाएं
    • res :=न्यूनतम रेस, दाएं-बाएं + 1
    • m[s[बाएं]] को 1 से बढ़ाएं
    • बाएं 1 से बढ़ाएं
  • रिटर्न रेस
  • आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -

    उदाहरण

    #include <bits/stdc++.h>
    using namespace std;
    class Solution {
       public:
       int balancedString(string s) {
          unordered_map <char, int> m;
          for(int i = 0;i<s.size();i++)m[s[i]]++;
          int n = s.size();
          int res = n;
          int left = 0;
          for(int right = 0;right<n;right++){
             m[s[right]]--;
             while(left<n && m['Q']<=n/4 && m['W'] <=n/4 && m['E'] <=n/4 && m['R']<=n/4){
                res = min(res, right - left + 1);
                m[s[left]]+=1;
                left++;
             }
          }
          return res;
       }
    };
    main(){
       Solution ob;
       cout << (ob.balancedString("QQEQ"));
    }

    इनपुट

    "QQEQ"

    आउटपुट

    2

    1. सी ++ में एक स्ट्रिंग में पहला दोहराया शब्द खोजें

      इस समस्या में, हम अल्पविराम से अलग किए गए शब्दों से मिलकर एक स्ट्रिंग स्ट्रिंग हैं। हमारा काम है एक स्ट्रिंग में दोहराए गए पहले शब्द को ढूंढना । हमें स्ट्रिंग में दोहराए जाने वाले पहले शब्द दो रिक्त स्थान के बीच की स्ट्रिंग को खोजने की जरूरत है। समस्या को समझने के लिए एक उदाहरण लेते हैं, Input :

    1. सी ++ में ऐरे में उपसर्ग की अधिकतम घटना

      इस समस्या में, हमें सभी लोअरकेस में वर्णों की एक सरणी दी गई है। हमारा काम सरणी में उपसर्ग की अधिकतम उपस्थिति . है । हमें गैर-रिक्त उपसर्गों की पुनरावृत्ति की गणना करने की आवश्यकता है जिनकी घटना संख्या अधिकतम है। समस्या को समझने के लिए एक उदाहरण लेते हैं, Input : string = “xyyzkxyyzk”

    1. C++ का उपयोग करके एक स्ट्रिंग के सबस्ट्रिंग की संख्या ज्ञात करें

      इस लेख में, आप किसी दिए गए स्ट्रिंग में बनाए जा सकने वाले सबस्ट्रिंग (गैर-रिक्त) की संख्या को खोजने के तरीकों के बारे में जानेंगे। Input : string = “moon” Output : 10 Explanation: Substrings are ‘m’, ‘o’, ‘o’, ‘n’, ‘mo’, &lsqu