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

C++ में स्ट्रिंग से आसन्न डुप्लिकेट II हटाना


मान लीजिए एक स्ट्रिंग s दी गई है, एक k डुप्लिकेट हटाने में स्ट्रिंग s से k आसन्न और समान अक्षरों को चुनकर उन्हें हटाना शामिल है जिससे हटाए गए उपस्ट्रिंग के बाएं और दाएं पक्ष एक साथ जुड़ जाते हैं। हम दिए गए स्ट्रिंग s पर बार-बार k डुप्लिकेट हटाने करेंगे जब तक हम शेष को बदल नहीं सकते। हमें सभी ऐसे डुप्लिकेट हटाने के बाद अंतिम स्ट्रिंग ढूंढनी है। उदाहरण के लिए, यदि s = "deeedbbcccbdaa" और k = 3 है, तो आउटपुट "aa" होगा। पहले "eee" और "ccc" हटाएं, हमें "ddbbbaa" मिलेगा, फिर "bbb" हटाएं, स्ट्रिंग "dddaa" होगी, फिर "ddd" हटाएं, और आउटपुट "aa" होगा।

हल करने के चरण

  • ans := खाली स्ट्रिंग
  • चार-इंट पेयर के लिए एक स्टैक बनाएं, n := स्ट्रिंग का आकार
  • i को 0 से n तक लूप करें
    • x := s[i]
    • यदि स्टैक खाली नहीं है और स्टैक के शीर्ष तत्व का इंटीजर = k, तो स्टैक से शीर्ष तत्व हटाएं
    • यदि i = n, तो ब्रेक करें
    • यदि स्टैक खाली है या स्टैक के शीर्ष का कैरेक्टर x नहीं है, तो पेयर (x, 1) को स्टैक में डालें, और i को 1 से बढ़ाएं
    • अन्यथा स्टैक के शीर्ष तत्व के इंटीजर भाग को बढ़ाएं, और i को 1 से बढ़ाएं
  • जब तक स्टैक खाली नहीं है
    • temp := स्टैक का शीर्ष तत्व
    • जब तक temp का इंटीजर भाग 0 नहीं है
      • ans := ans + temp का कैरेक्टर भाग
      • temp के इंटीजर भाग को 1 से घटाएं
    • स्टैक से शीर्ष तत्व हटाएं
  • ans स्ट्रिंग को रिवर्स करें और वापस करें

उदाहरण

#include <bits/stdc++.h> using namespace std; class Solution {    public:    string removeDuplicates(string s, int k) {       string ans = "";       stack < pair<char, int> > st;       int n = s.size();       for(int i = 0; i <= n;){          char x = s[i];          if(!st.empty() && st.top().second == k)st.pop();          if(i == n)break;          if(st.empty() || st.top().first != x){             st.push({x, 1});             i++;          } else {             st.top().second++;             i++;          }       }       while(!st.empty()){          pair <char, int> temp = st.top();          while(temp.second--) ans += temp.first;          st.pop();       }       reverse(ans.begin(), ans.end());       return ans;    } }; main(){    Solution ob;    cout <<(ob.removeDuplicates("deeedbbcccbdaa", 3)); }

इनपुट

"deeedbbcccbdaa" 3

आउटपुट

aa
  1. - C# में दी गई स्ट्रिंग से सभी डुप्लिकेट हटाना

    यहाँ स्ट्रिंग है।string str = "ppqqrr";अब, स्ट्रिंग को char में मैप करने के लिए Hashset का उपयोग करें। यह स्ट्रिंग से डुप्लिकेट वर्णों को हटा देगा।var res = new HashSet<char>(str);आइए पूरा उदाहरण देखें:उदाहरणusing System; using System.Linq; using System.Collections.Generic; namespace

  1. - पायथन में स्ट्रिंग से सभी आसन्न डुप्लिकेट हटाएं

    मान लीजिए हमारे पास लोअरकेस अक्षरों की एक स्ट्रिंग S है; एक डुप्लिकेट रिमूवल ऑपरेशन किया जाएगा। यह दो आसन्न और समान अक्षरों को चुनकर और उन्हें हटाकर किया जाएगा। हम S से बार-बार डुप्लिकेट हटाएंगे जब तक कोई डुप्लिकेट शेष न रहे। सभी ऐसे डुप्लिकेट रिमूवल पूरे होने के बाद स्ट्रिंग लौटाएं। यह गारंटी है क

  1. - पायथन में दी गई स्ट्रिंग से सभी डुप्लिकेट हटाना

    समस्या विवरण पायथन में स्ट्रिंग से सभी डुप्लिकेट हटाने के लिए, हमें पहले स्ट्रिंग को स्पेस से विभाजित करना होगा ताकि हमारे पास प्रत्येक शब्द एक सरणी में हो। फिर डुप्लिकेट हटाने के कई तरीके हैं। हम सभी शब्दों को लोअरकेस में बदलकर, फिर उन्हें सॉर्ट करके और अंत में केवल अद्वितीय वालों को चुनकर डुप्लिके