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

C++ में न्यूनतम विंडो परवर्ती

मान लीजिए कि हमारे पास दो स्ट्रिंग्स S और T हैं, हमें S का न्यूनतम सबस्ट्रिंग W ज्ञात करना है, ताकि T, W का परवर्ती हो। यदि S में ऐसी कोई विंडो नहीं है जो T के सभी वर्णों को कवर करती हो, तो खाली स्ट्रिंग लौटाएं। अगर ऐसी कई विंडो हैं, तो हमें सबसे बाईं ओर से शुरू होने वाले इंडेक्स के साथ एक को वापस करना होगा।

इसलिए, यदि इनपुट S ="abcdebdde", T ="bde" जैसा है, तो आउटपुट "bcde" होगा जैसा कि "bdde" से पहले होता है। "deb" कोई छोटी विंडो नहीं है क्योंकि विंडो में T के तत्व क्रम में होने चाहिए।

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

  • tidx:=0, tlen:=T का आकार

  • n :=S का आकार

  • मैं:=0, लंबाई:=inf, प्रारंभ:=-1

  • जबकि मैं

    • यदि S[i], T[tidx] के समान है, तो -

      • (tidx को 1 से बढ़ाएं)

      • यदि tidx tlen के समान है, तो -

        • अंत:=मैं + 1

        • (tidx को 1 से घटाएं)

        • जबकि tidx>=0, करें −

          • यदि S[i], T[tidx] के समान है, तो -

            • (tidx को 1 से घटाएं)

          • (i 1 से घटाएं)

        • (मैं 1 से बढ़ाइए)

        • (tidx को 1 से बढ़ाएं)

        • अगर अंत - i <लंबाई, तो -

          • लंबाई :=अंत - मैं

          • प्रारंभ:=मैं

    • (मैं 1 से बढ़ाइए)

  • यदि प्रारंभ -1 के बराबर नहीं है, तो -

    • प्रारंभ करने के लिए मैं:=प्रारंभ, जब मैं <शुरू + लंबाई, अद्यतन (मैं 1 से बढ़ाएँ), करते हैं -

      • रिट:=रिट + एस[i]

  • वापसी रिट

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

उदाहरण

#include <bits/stdc++.h>
using namespace std;
class Solution {
   public:
   string minWindow(string S, string T) {
      int tidx = 0;
      int tlen = T.size();
      int n = S.size();
      int i = 0;
      int length = INT_MAX;
      int start = -1;
      string ret;
      while (i < n) {
         if (S[i] == T[tidx]) {
            tidx++;
            if (tidx == tlen) {
               int end = i + 1;
               tidx--;
               while (tidx >= 0) {
                  if (S[i] == T[tidx]) {
                     tidx--;
                  }
                  i--;
               }
               i++;
               tidx++;
               if (end - i < length) {
                  length = end - i;
                  start = i;
               }
            }
         }
         i++;
      }
      if (start != -1)
      for (int i = start; i < start + length; i++)
      ret += S[i];
      return ret;
   }
};
main(){
   Solution ob;
   cout << (ob.minWindow("abcdebdde", "bde"));
}

इनपुट

"abcdebdde", "bde"

आउटपुट

"bcde"

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

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

  1. सी++ में न्यूनतम पथ योग

    मान लीजिए कि हमारे पास गैर-ऋणात्मक पूर्णांकों से भरा एक m x n मैट्रिक्स है, तो ऊपरी बाएं कोने से नीचे दाएं कोने तक एक पथ खोजें जो इसके पथ के साथ सभी संख्याओं के योग को कम करता है। आंदोलन किसी भी समय केवल नीचे या दाएं हो सकते हैं। तो उदाहरण के लिए, यदि मैट्रिक्स नीचे जैसा है 1 3 1 1 5 1 4 2 1 आ

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

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