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

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


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

उदाहरण के लिए, इनपुट ["/myfolder","/myfolder/secondfolder","/another/document","/another/document/extrafolder","/another/final"] है, तो आउटपुट ["/myfolder","/another/final","/another/document"] होगा।

हल करने के चरण

  • पथों की लंबाई के आधार पर फोल्डर सरणी को सॉर्ट करें
  • एक मैप m और एक सरणी ans बनाएं
  • i को 0 से पथ सरणी के आकार - 1 तक लूप करें
    • s := path_array[i]
    • temp := खाली स्ट्रिंग
    • flag को true सेट करें
    • j को 0 से s के आकार तक लूप करें
      • temp := temp + s[j]
      • j को 1 से बढ़ाएं
      • जब तक j < सरणी का आकार और s[j] '/' नहीं है
        • temp := temp + s[j], j को 1 से बढ़ाएं
      • यदि m[temp] false नहीं है, तो flag := false, और ब्रेक करें
  • यदि flag true है, तो s को ans में डालें, और m[s] := true सेट करें
  • 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:    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. C++ में भूलभुलैया समस्या का समाधान C++ में भूलभुलैया समस्या का समाधान

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

  1. - C# में SortedList से निर्दिष्ट सूचकांक पर तत्व हटाएं

    C# में SortedList वर्ग की RemoveAt(int index) विधि का उपयोग करके निर्दिष्ट सूचकांक पर स्थित कुंजी-मान जोड़े को हटाया जा सकता है। चूंकि SortedList कुंजियों के आधार पर क्रमबद्ध होता है, सूचकांक क्रमबद्ध क्रम को दर्शाता है, सम्मिलन क्रम नहीं। उदाहरण 1: सूचकांक 3 पर तत्व हटाना using System; using Syste

  1. - C# में SortedSet से सभी तत्व हटाएं

    उदाहरण SortedSet<T> की Clear() मेथड सेट से सभी तत्वों को हटा देती है। इस उदाहरण में दो SortedSet बनाए गए हैं, दूसरे में तत्व जोड़े गए हैं, फिर Clear() कॉल करके खाली किया गया है। using System; using System.Collections.Generic; public class Demo { public static void Main() { SortedS