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

सी++ में न्यूनतम विंडो सबस्ट्रिंग

मान लीजिए हमारे पास एक स्ट्रिंग एस और टी है। हमें एस में न्यूनतम विंडो ढूंढनी है जिसमें टी में सभी वर्ण होंगे। इसलिए यदि इनपुट "ABHDAXCVBAGTXATYCB" और T ="ABC" जैसा है, तो परिणाम होगा:" सीवीबीए”।

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

  • एक नक्शा बनाएं मी

  • x की आवृत्ति को m में संग्रहित करें

  • लंबाई:=s का आकार, बाएँ:=0, दाएँ:=0, उत्तर बाएँ:=0 और उत्तर दाएँ:=0

  • काउंटर:=x का आकार, ध्वज:=झूठा, उत्तर:=खाली स्ट्रिंग

  • जबकि ऊंचाई

    • सी:=एस [दाएं]

    • अगर c m में मौजूद है, तो

      • अगर m[c]> 0, तो काउंटर को 1 से कम करें

      • m[c] को 1 से कम करें

    • जबकि काउंटर =0 और बाएँ <=दाएँ

      • अगर दाएं - बाएं + 1 <=लंबाई

        • लंबाई :=दाएँ-बाएँ + 1

        • झंडा :=सच

        • उत्तर बाएँ:=बाएँ, उत्तर दाएँ:=दाएँ

      • अगर बाएँ =दाएँ, तो लूप तोड़ें

      • सी:=एस [बाएं]

      • यदि c m में मौजूद है, तो m[c] को 1 से बढ़ा दें

      • अगर m[c]> 0, तो काउंटर को 1 से बढ़ा दें

      • बाईं ओर 1

        . बढ़ाएं
    • 1

      . द्वारा सही बढ़ाएं
  • अगर झंडा गलत है, तो जवाब वापस करें

  • अन्यथा के लिए मैं उत्तर की सीमा में उत्तर के लिए बाएं, एस द्वारा उत्तर बढ़ाएं [i]

  • वापसी उत्तर

उदाहरण

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

#include <bits/stdc++.h>
using namespace std;
class Solution {
   public:
   string minWindow(string s, string x) {
      map <char, int> m;
      for(int i =0;i<x.size();i++)m[x[i]]++;
      int length = s.size();
      int left = 0, right = 0 , ansLeft = 0, ansRight = 0;
      int counter = x.size();
      bool flag = false;
      string ans = "";
      while(right<s.size()){
         char c = s[right];
         if(m.find(c)!=m.end()){
            if(m[c]>0)counter--;
            m[c]--;
         }
         while(counter == 0 && left<=right){
            if(right-left+1 <=length){
               length = right-left+1;
               flag = true;
               ansLeft = left;
               ansRight = right;
            }
            if(left == right)break;
            c = s[left];
            if(m.find(c)!=m.end()){
               m[c]++;
               if(m[c]>0)counter++;
            }
            left++;
         }
         right++;
      }
      if(!flag)return ans;
      else
      for(int i =ansLeft;i<=ansRight;i++)ans+=s[i];
      return ans;
   }
};
main(){
   Solution ob;
   cout << (ob.minWindow("ABHDAXCVBAGTXATYCB", "ABC"));
}

इनपुट

"ABHDAXCVBAGTXATYCB"
"ABC"

आउटपुट

CVBA

  1. C++ में न्यूनतम नाइट मूव्स

    मान लीजिए कि हमारे पास एक अनंत शतरंज की बिसात है जिसमें -infinity से +infinity तक के निर्देशांक हैं, और हमारे पास वर्ग [0, 0] पर एक नाइट है। एक शूरवीर के पास 8 संभावित चालें हैं, जैसा कि नीचे दिखाया गया है। प्रत्येक चाल एक कार्डिनल दिशा में दो वर्ग है, फिर एक वर्ग एक ओर्थोगोनल दिशा में है। हमें न

  1. सी ++ में सबस्ट्रिंग

    एक सबस्ट्रिंग एक स्ट्रिंग का एक भाग है। सी ++ में सबस्ट्रिंग प्राप्त करने के लिए एक फ़ंक्शन सबस्ट्र () है। इस फ़ंक्शन में दो पैरामीटर हैं:पॉज़ और लेन। पॉज़ पैरामीटर सबस्ट्रिंग की प्रारंभ स्थिति को निर्दिष्ट करता है और लेन एक सबस्ट्रिंग में वर्णों की संख्या को दर्शाता है। एक प्रोग्राम जो C++ में सबस

  1. विंडो पर c++ के लिए शीर्ष IDE क्या है?

    केवल टेक्स्ट एडिटर्स पर बड़े प्रोजेक्ट्स को मैनेज करना मुश्किल है। यदि आप ऐसे मामलों में आईडीई का उपयोग करते हैं तो आप अधिक उत्पादक और कम निराश होने की संभावना रखते हैं। विभिन्न प्रकार के आईडीई हैं और आपको अपनी आवश्यकताओं के अनुरूप सही का चयन करना चाहिए। यहां विंडो के लिए सर्वश्रेष्ठ C/C++ IDE की सू