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

C++ . में विभाजन लेबल


मान लीजिए कि हमारे पास एक स्ट्रिंग है जिसमें लोअरकेस अक्षरों का S दिया गया है। हम इस स्ट्रिंग को अधिक से अधिक भागों में विभाजित करेंगे ताकि प्रत्येक अक्षर अधिक से अधिक एक भाग में दिखाई दे, अंत में इन भागों के आकार का प्रतिनिधित्व करने वाले पूर्णांकों की एक सूची लौटाएं। इसलिए यदि स्ट्रिंग "ababcbacadefegdehijhklij" की तरह है, तो आउटपुट [9,7,8] है, क्योंकि विभाजन "ababcbaca", "defegde", "hijhklij" हैं। तो यह एक विभाजन है ताकि प्रत्येक अक्षर अधिक से अधिक एक भाग में हो। "ababcbacadefegde", "hijhklij" जैसा विभाजन सही नहीं है, क्योंकि यह S को कम भागों में विभाजित करता है।

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

  • सीएनटी नामक एक मानचित्र परिभाषित करें
  • मैं के लिए 0 से s की सीमा में, cnt[s[i]] :=i
  • j :=0, start :=0 and i :=0 and n :=size of s
  • एक सरणी उत्तर परिभाषित करें
  • जबकि मैं
  • j :=अधिकतम j और cnt[s[i]]
  • अगर i =j, तो i - start + 1 को ans में डालें और start :=i + 1
  • मैं 1 से बढ़ाएँ
  • वापसी उत्तर
  • उदाहरण(C++)

    आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -

    #include <bits/stdc++.h>
    using namespace std;
    void print_vector(vector<auto> v){
       cout << "[";
       for(int i = 0; i<v.size(); i++){
          cout << v[i] << ", ";
       }
       cout << "]"<<endl;
    }
    class Solution {
    public:
       vector<int> partitionLabels(string s) {
          map <char, int> cnt;
          for(int i = 0; i < s.size(); i++)cnt[s[i]] = i;
          int j = 0, start = 0;
          int i = 0;
          int n = s.size();
          vector <int> ans;
          while(i < n){
             j = max(j, cnt[s[i]]);
             if( i == j){
                ans.push_back(i-start+ 1);
                start = i + 1;
             }
             i++;
          }
          return ans;
       }
    };
    main(){
       Solution ob;
       print_vector(ob.partitionLabels("ababcbacadefegdehijhklij"));
    }

    इनपुट

    "ababcbacadefegdehijhklij"

    आउटपुट

    [9,7,8]

    1. सी++ में static_assert

      static_assert एक ऐसा फ़ंक्शन है जो प्रोग्राम को आउटपुट के साथ बहुत अधिक गड़बड़ किए बिना प्रोग्राम को संकलित करने के बाद स्क्रीन में त्रुटि को प्रिंट करने के लिए उपयोगी है। पहले C++11 और C++14 में, static_assert की अलग-अलग कार्यक्षमता थी, जिसका अर्थ है कि हमें static_assert को परिभाषित करते हुए अपना

    1. सी ++ में सरणी में विभाजन बिंदु खोजें

      इस ट्यूटोरियल में, हम एक ऐरे में पार्टिशन पॉइंट ढूँढ़ने जा रहे हैं जहाँ पार्टिशन पॉइंट पर छोड़े गए सभी एलिमेंट छोटे हैं और पार्टिशन पॉइंट के सभी एलिमेंट बड़े हैं। आइए समस्या को हल करने के लिए चरणों को देखें। ऐरे को इनिशियलाइज़ करें। सरणी पर पुनरावृति करें। 0 से I तक पुनरावृति करें और प्रत्

    1. C++ में समान वृक्ष विभाजन

      मान लीजिए कि हमारे पास n नोड्स के साथ एक बाइनरी ट्री है, तो हमारा काम यह जांचना है कि क्या ट्री को दो पेड़ों में विभाजित करना संभव है, जिनका मूल पेड़ के ठीक एक किनारे को हटाने के बाद बराबर योग है। तो, अगर इनपुट पसंद है तब आउटपुट सही होगा। इसे हल करने के लिए, हम इन चरणों का पालन करेंगे - एक