কম্পিউটার

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, এবং আরেকটি অ্যারে ans তৈরি করুন
  • আমি 0 থেকে পাথ অ্যারের আকার - 1
      পরিসরে
    • s :=path_array[i]
    • temp :=খালি স্ট্রিং
    • পতাকাকে সত্য হিসাবে সেট করুন
    • j-এর জন্য 0 থেকে s এর আকারের মধ্যে
    • temp :=temp + s[j]
    • j 1 দ্বারা বাড়ান
    • যখন j <অ্যারের আকার এবং s[j] '/'
        নয়
      • temp :=temp + 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. C++ এ গোলকধাঁধা

    2. C++ এ std::string থেকে স্পেস বাদ দিন

    3. C# এ একটি সাজানো তালিকার নির্দিষ্ট সূচক থেকে সরান

    4. C# এ সাজানো সেট থেকে সমস্ত উপাদান সরান