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

C++ में डुप्लिकेट अक्षर हटाएं


मान लीजिए हमारे पास केवल लोअरकेस अक्षरों से युक्त एक स्ट्रिंग है। हमें सभी डुप्लिकेट अक्षरों को हटाना है ताकि सभी अक्षर केवल एक बार हों। और हमें परिणाम को सबसे छोटे शब्दकोश क्रम में प्रदर्शित करना है। तो यदि इनपुट "abccb" जैसा है, तो परिणाम "abc" होगा।

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

  • ans := एक खाली स्ट्रिंग

  • एक स्टैक st परिभाषित करें

  • आकार 26 की एक सरणी onStack परिभाषित करें

  • एक मैप m परिभाषित करें

  • n := s का आकार

  • i := 0 से आरंभ करें, जब i < n, i को 1 से बढ़ाएं करें -

    • m[s[i]] को 1 से बढ़ाएं

  • i := 0 से आरंभ करें, जब i < n, i को 1 से बढ़ाएं करें -

    • आकार i की एक सरणी x = s परिभाषित करें

    • m[x] को 1 से घटाएं

    • यदि onStack[x - 'a'] शून्येतर है, तो,

      • निम्न भाग को अनदेखा करें, अगले पुनरावृत्ति पर जाएं

    • जब st खाली नहीं है और x < st.top(), करें -

      • onStack[st के शीर्ष - 'a'] := false

      • st से आइटम हटाएं

    • x को st में डालें

    • onStack[x - 'a'] := true

  • जब (st खाली है) असत्य है, करें -

    • x := st का शीर्ष तत्व

    • st से आइटम हटाएं

    • ans = ans + x

  • सरणी rev को उल्टा करें

  • ans लौटाएं

उदाहरण

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

#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:    string removeDuplicateLetters(string s) {       string ans = "";       stack <char> st;       vector <int> onStack(26);       map <char, int> m;       int n = s.size();       for(int i = 0; i < n; i++){          m[s[i]]++;       }       for(int i = 0; i < n; i++){          char x = s[i];          m[x]--;          if(onStack[x - 'a'])continue;          while(!st.empty() && x < st.top() && m[st.top()]){             onStack[st.top() - 'a'] = false;             st.pop();          }          st.push(x);          onStack[x - 'a'] = true;       }       while(!st.empty()){          char x = st.top();          st.pop();          ans += x;       }       reverse(ans.begin(), ans.end());       return ans;    } }; main(){    Solution ob;    cout << (ob.removeDuplicateLetters("abccb")); }

इनपुट

"abccb"

आउटपुट

"abc"

  1. C++ में डुप्लिकेट उपट्री ढूंढना C++ में डुप्लिकेट उपट्री ढूंढना

    मान लीजिए हमारे पास एक बाइनरी ट्री है। हमें सभी डुप्लिकेट उपट्री ढूंढने हैं। इसलिए प्रत्येक प्रकार के डुप्लिकेट उपट्री के लिए, हमें उनमें से किसी एक का रूट नोड लौटाना है। मान लीजिए हमारे पास ऐसा ट्री है: डुप्लिकेट उपट्री हैं: हल का दृष्टिकोण इसे हल करने के लिए हम निम्नलिखित चरणों का पालन करेंगे:

  1. C++ में सभी डुप्लिकेट सबट्री खोजें C++ में सभी डुप्लिकेट सबट्री खोजें

    मान लीजिए हमारे पास एक बाइनरी ट्री है। हमें यह पता लगाना है कि ट्री में कुछ डुप्लिकेट सबट्री हैं या नहीं। मान लीजिए हमारे पास नीचे जैसा बाइनरी ट्री है: आकार 2 के दो समान सबट्री हैं। प्रत्येक सबट्री में D, BD और BE भी डुप्लिकेट सबट्री हैं। हम इस समस्या को ट्री सीरियलाइज़ेशन और हैशिंग प्रक्रिया का उ

  1. - C++ प्रोग्राम: स्ट्रिंग से स्पेस हटाना

    प्रोग्राम एक स्ट्रिंग लेता है और उसमें से स्पेस हटा देता है। यह तब उपयोगी होता है जब हम अपने स्ट्रिंग की स्पेस बचाना चाहते हैं। निम्नलिखित नमूना दिखाता है कि इसे व्याख्या के साथ कैसे किया जाता है। Input: Hello World Output: HelloWorld व्याख्या स्ट्रिंग या वाक्य से स्पेस को हटाने या डिलीट करने के लिए