C++のファイルシステムからサブフォルダを削除する
フォルダのリストがあるとすると、それらのフォルダ内のすべてのサブフォルダを削除し、削除後に任意の順序でフォルダを返す必要があります。ここで、folder[i]が別のfolder[j]内にある場合、そのサブフォルダーとして示されます。パスはfolder1/subfolder2/…などのようになります。
入力が次のようであると仮定します
["/myfolder","/myfolder/secondfolder","/another/document","/another/document/extrafolder","/another/final"], then the output will be: ["/myfolder","/another/final","/another/document"]
これを解決するには、次の手順に従います-
- パスの長さに基づいてフォルダ配列を並べ替えます
- 1つのマップmと、別の配列ansを作成します
- 0からパス配列のサイズまでの範囲のiの場合– 1
- s:=path_array [i]
- temp:=空の文字列
- フラグをtrueに設定
- 範囲0からsのサイズのjの場合
- temp:=temp + s [j]
- jを1増やします
- 一方、j <配列のサイズであり、s[j]は「/」ではありません
- temp:=temp + s [j]、jを1増やします
- m [temp]がfalseでない場合は、フラグ:=falseを設定し、中断します
- フラグがtrueの場合、sをansに挿入し、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, ]
-
C++の迷路
空のスペースと壁のある迷路の中にボールがあるとします。これで、ボールは上、下、左、右などの任意の方向に転がることで空のパスを通過できますが、壁にぶつかるまで転がりが止まりません。ボールが止まると、次の方向を選択できます。 ボールの位置、目的地、迷路を開始し、ボールが目的地に止まるかどうかを確認する必要があります。迷路は1つの2D配列で表されます。ここで、1は壁を示し、0は空きスペースを示します。迷路の境界はすべて壁です。開始座標と宛先座標は、行と列のインデックスで表されます。 したがって、入力が2D配列で表される迷路のようなものである場合 0 0 1 0 0
-
C#のSortedSetからすべての要素を削除します
SortedSetからすべての要素を削除するためのコードは、次のとおりです- 例 using System; using System.Collections.Generic; public class Demo { public static void Main(){ SortedSet<string> set1 = new SortedSet<string>(); set1.Add("AB");