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

C++ में फाइल सिस्टम से सब-फोल्डर्स को हटा दें

मान लीजिए हमारे पास फ़ोल्डरों की एक सूची है, हमें उन फ़ोल्डरों में सभी उप-फ़ोल्डरों को हटाना होगा और किसी भी क्रम में फ़ोल्डरों को हटाने के बाद वापस करना होगा। यहां यदि कोई फ़ोल्डर [i] किसी अन्य फ़ोल्डर [j] के भीतर स्थित है, तो इसे इसके सबफ़ोल्डर के रूप में दर्शाया जाता है। पथ फ़ोल्डर1/सबफ़ोल्डर2/… आदि जैसे होंगे।

मान लीजिए इनपुट की तरह है

["/myfolder","/myfolder/secondfolder","/another/document","/another/document/extrafolder","/another/final"], then the output will be:
["/myfolder","/another/final","/another/document"]

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

  • पथों की लंबाई के आधार पर फ़ोल्डर सरणी को क्रमबद्ध करें
  • एक नक्शा m बनाएं, और दूसरा सरणी उत्तर दें
  • मैं के लिए 0 से पथ सरणी के आकार में - 1
    • s :=path_array[i]
    • अस्थायी:=खाली स्ट्रिंग
    • झंडे को सही के रूप में सेट करें
    • जे के लिए 0 से लेकर एस के आकार तक
      • अस्थायी:=अस्थायी + एस[जे]
      • j को 1 से बढ़ाएं
      • जबकि j <सरणी का आकार और s[j] '/' नहीं है
        • अस्थायी:=अस्थायी + s[j], और j को 1 से बढ़ाएं
      • अगर m[temp] गलत नहीं है, तो फ्लैग करें:=असत्य, और तोड़ें
  • यदि ध्वज सत्य है, तो उत्तर में s डालें और m[s] :=true
  • सेट करें
  • वापसी उत्तर

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

उदाहरण

#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:
   static bool cmp(string s,string x){
      return s.size()<x.size();
   }
   vector<string> removeSubfolders(vector<string>& f) {
      sort(f.begin(),f.end(),cmp);
      map <string,bool> m;
      vector <string> ans;
      for(int i =0;i<f.size();i++){
         string s= f[i];
         string temp="";
         bool flag = true;
         for(int j =0;j<s.size();){
            temp+=s[j];
            j++;
            while(j<s.size() && s[j]!='/'){
               temp+=s[j];
               j++;
            }
            if(m[temp]){
               flag = false;
               break;
            }
         }
         if(flag){
            ans.push_back(s);
            m[s]=true;
         }
      }
      return ans;
   }
};
main(){
   vector<string> v = {"/myfolder","/myfolder/secondfolder","/another/document","/another/document/extrafolder","/another/final"};
   Solution ob;
   print_vector(ob.removeSubfolders(v));
}

इनपुट

["/myfolder","/myfolder/secondfolder","/another/document","/another/document/extrafolder","/another/final"]

आउटपुट

[/myfolder, /another/final, /another/document, ]

  1. सी ++ में भूलभुलैया

    मान लीजिए कि एक भूलभुलैया में खाली जगह और दीवारों के साथ एक गेंद है। अब गेंद ऊपर, नीचे, बाएँ या दाएँ किसी भी दिशा में लुढ़क कर खाली रास्तों से जा सकती है, लेकिन दीवार से टकराने तक यह लुढ़कना बंद नहीं करेगी। जब गेंद रुकती है, तो वह अगली दिशा चुन सकती है। हमें गेंद की स्थिति, गंतव्य और भूलभुलैया शुरू

  1. सी # में सॉर्टेडलिस्ट की निर्दिष्ट अनुक्रमणिका से निकालें

    SortedList की निर्दिष्ट अनुक्रमणिका से निकालने के लिए, कोड इस प्रकार है - उदाहरण using System; using System.Collections; public class Demo {    public static void Main(String[] args) {       SortedList sortedList = new SortedList();       sortedList.Add("

  1. सी # में सॉर्टेडसेट से सभी तत्वों को हटा दें

    SortedSet से सभी तत्वों को हटाने के लिए, कोड इस प्रकार है - उदाहरण using System; using System.Collections.Generic; public class Demo {    public static void Main(){       SortedSet<string> set1 = new SortedSet<string>();       set1.Add("AB&quo