ধরুন আমাদের কাছে ফোল্ডারগুলির একটি তালিকা আছে, আমাদের সেই ফোল্ডারগুলির সমস্ত সাব-ফোল্ডার সরিয়ে ফেলতে হবে এবং অপসারণের পরে ফোল্ডারগুলি যে কোনও ক্রমে ফিরিয়ে আনতে হবে। এখানে যদি একটি ফোল্ডার[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] মিথ্যা না হয়, তাহলে পতাকা :=মিথ্যা, এবং বিরতি
আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -
উদাহরণ
#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, ]