你是一位系统管理员,手里有一份文件夹列表 folder,你的任务是要删除该列表中的所有 子文件夹,并以 任意顺序 返回剩下的文件夹。
我们这样定义「子文件夹」:
如果文件夹 folder[i] 位于另一个文件夹 folder[j] 下,那么 folder[i] 就是 folder[j] 的子文件夹。
文件夹的「路径」是由一个或多个按以下格式串联形成的字符串:
/ 后跟一个或者多个小写英文字母。
例如,/leetcode 和 /leetcode/problems 都是有效的路径,而空字符串和 / 不是。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/remove-sub-folders-from-the-filesystem
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
示例 1:
输入:folder = ["/a","/a/b","/c/d","/c/d/e","/c/f"]
输出:["/a","/c/d","/c/f"]
解释:"/a/b/" 是 “/a” 的子文件夹,而 “/c/d/e” 是 “/c/d” 的子文件夹。
class Solution {
public:
vector removeSubfolders(vector& folder) {
sort(folder.begin(),folder.end());
map<string,bool>ret;
for(int i=0;i<folder.size();i++)
{
bool flag=true;
for(int j=1;j<folder[i].size();j++)
if(folder[i][j]==’/’&&ret[folder[i].substr(0,j)])
{
flag=false;
break;
}
if(flag)
ret[folder[i]]=true;
}
vectorans;
for(auto& it:ret)
if(it.second)
ans.push_back(it.first);
return ans;
}
};
ps:遇到重复问题可想到哈希map,利用不重复键值对性质。