一亩三分地论坛

 找回密码
 获取更多干货,去instant注册!

一亩三分地官方iOS手机应用下载
查看: 3070|回复: 47
收起左侧

Google 电面

[复制链接] |试试Instant~ |关注本帖
happysshao 发表于 2014-10-25 10:49:44 | 显示全部楼层 |阅读模式

2014(10-12月) 码农类 硕士 全职@Google - Other - 技术电面 |Other

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

您需要 登录 才可以下载或查看,没有帐号?获取更多干货,去instant注册!

x
新鲜出炉的google 电面

上来就是一个比较有难度的题目,感觉悲剧的节奏

Use the shorest unique prefix to represent each word in the array
input: ["zebra", "dog", "duck",”dot”]
output: {zebra: z, dog: do, duck: du}

[zebra, dog, duck, dove]
{zebra:z, dog: dog, duck: du, dove: dov}

[bearcat, bear]
{bearcat: bearc, bear: ""}.鏈枃鍘熷垱鑷1point3acres璁哄潧


我说用prefix tree来做吧,他说这是最优解,但是感觉45min写不完,说可以brute force.

. 1point 3acres 璁哄潧


评分

4

查看全部评分

Interviwer 发表于 2014-10-28 02:23:34 | 显示全部楼层
关注一亩三分地公众号:
Warald_一亩三分地
其实45min 是可以写完的,只实现insert 和 min prefix就行了
  1. #include<iostream>
  2. #include<vector>
  3. #include<string>
  4. using namespace std;

  5. class Node {
  6. public:
  7.     bool is_word;
  8.     int count;
  9.     vector<Node*> children;
  10. . from: 1point3acres.com/bbs
  11.     Node() {. 涓浜-涓夊垎-鍦帮紝鐙鍙戝竷
  12.         is_word = false;
  13.         count = 0;
  14.         for(int i = 0; i < 26; i ++) {
  15.             children.push_back(NULL);. more info on 1point3acres.com
  16.         }   
  17.     }   
  18. -google 1point3acres
  19.     void insert(string word) {
  20.         count ++;
  21.         if(word.size() == 0) {
  22.             is_word = true;
  23.             return;. 鍥磋鎴戜滑@1point 3 acres
  24.         }   
  25.         int tmp = word[0]-'a';. more info on 1point3acres.com
  26.         if(children[tmp] == NULL) {
  27.             children[tmp] = new Node();
  28.         }   
  29.         children[tmp]->insert(word.substr(1));. 鐗涗汉浜戦泦,涓浜╀笁鍒嗗湴
  30.     }   
  31. . Waral 鍗氬鏈夋洿澶氭枃绔,
  32.     string minPrefix(string word) {
  33.         if(word.size() == 0 || count == 1) {
  34.             return "";
  35.         }    鏉ユ簮涓浜.涓夊垎鍦拌鍧.
  36.         string rst;
  37.         rst.push_back(word[0]);
  38.         rst += children[word[0]-'a']->minPrefix(word.substr(1));. 1point3acres.com/bbs
  39.         return rst;
  40.     }    鏉ユ簮涓浜.涓夊垎鍦拌鍧.
  41. };

  42. int main() {
  43.     Node* root = new Node();
  44.     root->insert("zebra");
  45.     root->insert("dog");
  46.     root->insert("duck");. more info on 1point3acres.com
  47.     root->insert("dot");

  48.     cout << root->minPrefix("zebra") << endl;
  49.     cout << root->minPrefix("dog") << endl;
  50.     cout << root->minPrefix("duck") << endl;
  51.     cout << root->minPrefix("dot") << endl;-google 1point3acres
  52. }.鏈枃鍘熷垱鑷1point3acres璁哄潧
复制代码
回复 支持 1 反对 0

使用道具 举报

wstjpu 发表于 2014-10-26 05:44:59 | 显示全部楼层
关注一亩三分地微博:
Warald
第一个例子?dot怎么表示?
回复 支持 反对

使用道具 举报

wstjpu 发表于 2014-10-26 05:46:11 | 显示全部楼层
第一个例子?dot怎么表示?
回复 支持 反对

使用道具 举报

sally216 发表于 2014-10-26 10:08:12 | 显示全部楼层
难道不是trie嘛
求职神器indeed - 在全球最大的求职网站找找适合你的工作?
回复 支持 反对

使用道具 举报

byrlhb 发表于 2014-10-26 10:39:32 | 显示全部楼层
感觉像是trie,用查询函数吧,如果找到一个节点的count是1,输出就可以了
回复 支持 反对

使用道具 举报

byrlhb 发表于 2014-10-26 10:44:15 | 显示全部楼层
sorry,想错了,要更复杂一些
回复 支持 反对

使用道具 举报

Arthur2012 发表于 2014-10-26 11:58:25 | 显示全部楼层
请问lz可以多解释一下:
input: ["zebra", "dog", "duck",”dot”]
output: {zebra: z, dog: do, duck: du}
谢谢啦!
回复 支持 反对

使用道具 举报

一剑终情 发表于 2014-10-26 12:26:20 | 显示全部楼层
第一个难度不是dog:dog, dot:dot么?
回复 支持 反对

使用道具 举报

 楼主| happysshao 发表于 2014-10-27 01:21:16 | 显示全部楼层
一剑终情 发表于 2014-10-26 12:26
第一个难度不是dog:dog, dot:dot么?

应该是这样的
回复 支持 反对

使用道具 举报

 楼主| happysshao 发表于 2014-10-27 01:22:46 | 显示全部楼层
Arthur2012 发表于 2014-10-26 11:58
请问lz可以多解释一下:
input: ["zebra", "dog", "duck",”dot”]. from: 1point3acres.com/bbs
output: {zebra: z, dog: do, duck: d ...

应该是这样的
input: ["zebra", "dog", "duck",”dot”]. 鍥磋鎴戜滑@1point 3 acres
output: {zebra: z, dog: dog, duck: du,dot:dot}. 1point3acres.com/bbs

就是找到最短的且唯一能够区别于其他单词的 前缀
回复 支持 反对

使用道具 举报

unclewang 发表于 2014-10-27 02:10:53 | 显示全部楼层
问一下,如果给的单词里有dog 也有dogg,他们的输出分别应该是什么呢?
回复 支持 反对

使用道具 举报

Arthur2012 发表于 2014-10-27 02:38:53 | 显示全部楼层
谢谢lz了,我感觉可以用trie tree做,PS电面不容易!
回复 支持 反对

使用道具 举报

xperzy 发表于 2014-10-27 05:08:24 | 显示全部楼层
思路是不是这样啊?

扫一遍input array, 建一个trie(前缀树),搜到每个单词,向上查找,直到parent有大于一的children stop,当前node就是要找的结果。
e.g.
                                     ()
                                       |
                                    (d)
                                    /      \
                            (do)       (du)
                             /      \           \
                    (dog) (dot) (duck)

dot 向上 do有2 children,所以 dot本身就是结果
duck-->du-->d,d有2个children,所以du就是结果.鐣欏璁哄潧-涓浜-涓夊垎鍦
. 鐣欏鐢宠璁哄潧-涓浜╀笁鍒嗗湴


回复 支持 反对

使用道具 举报

Arthur2012 发表于 2014-10-27 05:13:55 | 显示全部楼层
xperzy 发表于 2014-10-27 05:08
思路是不是这样啊?

扫一遍input array, 建一个trie(前缀树),搜到每个单词,向上查找,直到parent有 ...

请问:ab,abb,abbb这种情况怎么办,第一个word是后面word的一个前缀
回复 支持 反对

使用道具 举报

lixiang.xjtu 发表于 2014-10-27 05:48:28 | 显示全部楼层
byrlhb 发表于 2014-10-26 10:44
sorry,想错了,要更复杂一些
鏉ユ簮涓浜.涓夊垎鍦拌鍧.
没错的。应该就是这样的。在Trie的每个中间节点加一个count field,插入的时候,count++,最后输出的时候,输出count为1的最高的那个点
回复 支持 反对

使用道具 举报

shinichish 发表于 2014-10-27 06:33:53 | 显示全部楼层
unclewang 发表于 2014-10-27 02:10. 鐣欏鐢宠璁哄潧-涓浜╀笁鍒嗗湴
问一下,如果给的单词里有dog 也有dogg,他们的输出分别应该是什么呢?

应该还是一样的把
回复 支持 反对

使用道具 举报

 楼主| happysshao 发表于 2014-10-27 11:55:30 | 显示全部楼层
xperzy 发表于 2014-10-27 05:08
思路是不是这样啊?

扫一遍input array, 建一个trie(前缀树),搜到每个单词,向上查找,直到parent有 ...

如何向上查找,难道你要建立双向的trie?
我当时也是提高这样的思路,但是感觉写不出来。。。
回复 支持 反对

使用道具 举报

 楼主| happysshao 发表于 2014-10-27 11:56:58 | 显示全部楼层
Arthur2012 发表于 2014-10-27 05:13
请问:ab,abb,abbb这种情况怎么办,第一个word是后面word的一个前缀

你给出的例子类似:
[bearcat, bear]
{bearcat: bearc, bear: ""}
.1point3acres缃
所以应该是 abbb:abbb;abb:"";ab:""
回复 支持 反对

使用道具 举报

Arthur2012 发表于 2014-10-27 12:10:07 | 显示全部楼层
happysshao 发表于 2014-10-27 11:56
你给出的例子类似: 鏉ユ簮涓浜.涓夊垎鍦拌鍧.

{bearcat: bearc, bear: ""}
. From 1point 3acres bbs
谢谢lz,lz一定会拿到onsite的,人品这么好!
回复 支持 反对

使用道具 举报

 楼主| happysshao 发表于 2014-10-27 13:12:00 | 显示全部楼层
Arthur2012 发表于 2014-10-27 12:10
谢谢lz,lz一定会拿到onsite的,人品这么好!

谢谢了!
回复 支持 反对

使用道具 举报

本版积分规则

请点这里访问我们的新网站:一亩三分地Instant.

Instant搜索更强大,不扣积分,内容组织的更好更整洁!目前仍在beta版本,努力完善中!反馈请点这里

关闭

一亩三分地推荐上一条 /5 下一条

手机版|小黑屋|一亩三分地论坛声明 ( 沪ICP备11015994号 )

custom counter

GMT+8, 2017-3-28 04:43

Powered by Discuz! X3

© 2001-2013 Comsenz Inc. Design By HUXTeam

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