📣 Back to School开学季 - VIP通行证5折优惠!蓝莓、Offer多多同步优惠
回复: 26
跳转到指定楼层
上一主题 下一主题
收起左侧

狗家 店面

全局:

2021(4-6月) 码农类General 本科 全职@google - 内推 - 技术电面  | | Fail | 在职跳槽

注册一亩三分地论坛,查看更多干货!

您需要 登录 才可以下载或查看附件。没有帐号?注册账号

x
没能找到利口类似的题,Google了一下有类似的,但感觉答案写得不对。求大佬们帮忙解答这题。感觉要用到graph和hashmap。。。

类似题:

原题:
Input is a list of String:
[
"/dir1/dir11/
您好!
本帖隐藏的内容需要积分高于 188 才可浏览
您当前积分为 0。
使用VIP即刻解锁阅读权限或查看其他获取积分的方式
游客,您好!
本帖隐藏的内容需要积分高于 188 才可浏览
您当前积分为 0。
VIP即刻解锁阅读权限查看其他获取积分的方式
Unlock interview details and practice with AI
Curated Interview Questions from Top Companies
dir121
---file1.txt
-dir3
--file2.gif
-file3.html

别忘了加米!感谢!

评分

参与人数 5大米 +13 收起 理由
烤馒头 + 1 赞一个
匿名用户-IFNYU + 8
一片云的猫 + 1 给你点个赞!
Falldawn + 2 给你点个赞!
ND0406 + 1 赞一个

查看全部评分


上一篇:丢盒子 时间线 面经
下一篇:奥斯卡健康 店面
全局:
trie + dfs可以解决掉吧
回复

使用道具 举报

地里匿名用户
推荐
匿名用户-DQP2N  2021-5-15 13:45:26 来自APP
反着遍历list里的string,并用hashmap建一个n-ary tree。 最后pre-order traversal 这个树输出结果。 time complexity 是O(N) sapce complexity 也是 O(N)。N是dir / file 的个数
回复

使用道具 举报

推荐
Falldawn 2021-6-11 12:51:21 | 只看该作者
全局:
写出来了,就是建图+DFS,当然输出的顺序和上面不一样,但是结果是对的。 还请多多加米,多谢!
root = "",root对应的都是一级folder和文件。

这题还是有容易出问题的地方,比如"file3.html",这里没有"/"所以直接是对应root


  1. private static final String DASH = "-";
  2.     public List<String> getAllDirectories(String[] input) {
  3.         List<String> res = new ArrayList<>();
  4.         if (input == null || input.length == 0) {
  5.             return res;
  6.         }
  7.         Map<String, Set<String>> graph = new HashMap<>();
  8.         buildGraph(input, graph);
  9.         StringBuilder soluPrefix = new StringBuilder();
  10.         getDirectories(res, graph, soluPrefix, "");
  11.         return res;
  12.     }

  13.     private void buildGraph(String[] input, Map<String, Set<String>> graph) {
  14.         graph.putIfAbsent("", new HashSet<>());
  15.         for (String s: input) {
  16.             String[] cur = s.split("/");
  17.             if (cur.length == 1) {
  18.                graph.get("").add(cur[0]);
  19.             } else {
  20.                 graph.get("").add(cur[1]);
  21.             }
  22.             for (int i = 1; i < cur.length; i++) {
  23.                 graph.putIfAbsent(cur[i - 1], new HashSet<>());
  24.                 graph.get(cur[i - 1]).add(cur[i]);
  25.    [/i]         }
  26.         }
  27.     }

  28.     private void getDirectories(List<String> res, Map<String, Set<String>> graph, StringBuilder soluPrefix, String cur) {
  29.         if (graph.get(cur) == null) {
  30.             return;
  31.         }
  32.         for (String next: graph.get(cur)) {
  33.             int len = soluPrefix.length();
  34.             soluPrefix.append(DASH).append(next);
  35.             res.add(soluPrefix.toString());
  36.             soluPrefix.setLength(len + 1);
  37.             getDirectories(res, graph, soluPrefix, next);
  38.             soluPrefix.setLength(len);
  39.         }
  40.     }
复制代码
回复

使用道具 举报

🔗
qinxnelaine 2021-5-15 08:31:26 | 只看该作者
全局:
只能想到暴力解法 string split成数组 用一个hashmap记录每个词出现的位置 如果后来出现比现在位置更靠后的替换掉 最后再输出。应该有更好的办法

补充内容 (2021-05-15 12:51 +8:00):
除了一个hashmap记录位置 还需要一个hashmap记录子目录 最后用dfs找出所有搭配
回复

使用道具 举报

全局:
topological sort?每个url从前连到后然后bfs?
回复

使用道具 举报

地里匿名用户
🔗
匿名用户-ZQOTE  2021-5-15 13:53:11 来自APP
sort input 然后再用vector track 目前的directories ?
回复

使用道具 举报

🔗
ND0406 2021-5-15 15:15:25 来自APP | 只看该作者
全局:
答案跟前面一样 创建一个node with multiple children。 不需要sort直接就开始塞。
赛完了dfs输出结果
时间复杂度就是O n
回复

使用道具 举报

🔗
flychicken 2021-5-16 01:54:46 | 只看该作者
全局:
感觉要自己写个class吧
回复

使用道具 举报

🔗
kashimoto 2021-5-16 03:04:19 | 只看该作者
全局:
感觉是字典树
回复

使用道具 举报

地里匿名用户
🔗
匿名用户-5GMGT  2021-5-18 02:44:39
请问如果要用trie的话那单独一个file如“file3.html”需要单独处理还是insert到trie里呢?

还有是否要先sort input才能进行trie implementation?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册账号
隐私提醒:
  • ☑ 禁止发布广告,拉群,贴个人联系方式:找人请去🔗同学同事飞友,拉群请去🔗拉群结伴,广告请去🔗跳蚤市场,和 🔗租房广告|找室友
  • ☑ 论坛内容在发帖 30 分钟内可以编辑,过后则不能删帖。为防止被骚扰甚至人肉,不要公开留微信等联系方式,如有需求请以论坛私信方式发送。
  • ☑ 干货版块可免费使用 🔗超级匿名:面经(美国面经、中国面经、数科面经、PM面经),抖包袱(美国、中国)和录取汇报、定位选校版
  • ☑ 查阅全站 🔗各种匿名方法

本版积分规则

>
快速回复 返回顶部 返回列表