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

C++ में Partition Labels


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

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

  • cnt नामक एक मैप परिभाषित करें
  • i को 0 से s तक की रेंज में, cnt[s[i]] := i
  • j := 0, start := 0 और i := 0 और n := s का आकार
  • ans नामक एक सरणी परिभाषित करें
  • जब तक i < n
    • j := j और cnt[s[i]] का अधिकतम
    • यदि i = j, तो i - start + 1 को ans में सम्मिलित करें और start := i + 1
    • i को 1 से बढ़ाएं
  • ans लौटाएं

उदाहरण (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. - C++ में static_assert

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

  1. - C++ में सरणी में पार्टीशन पॉइंट खोजें

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

  1. C++ में समान ट्री विभाजन C++ में समान ट्री विभाजन

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