一亩三分地论坛

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

扫码关注一亩三分地公众号
查看: 2690|回复: 47
收起左侧

Google 电面

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

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

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

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

x
新鲜出炉的google 电面. visit 1point3acres.com for more.
. visit 1point3acres.com for more.
上来就是一个比较有难度的题目,感觉悲剧的节奏.1point3acres缃

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

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

[bearcat, bear]
{bearcat: bearc, bear: ""}

. more info on 1point3acres.com
我说用prefix tree来做吧,他说这是最优解,但是感觉45min写不完,说可以brute force.
. 1point3acres.com/bbs

. 1point 3acres 璁哄潧

评分

4

查看全部评分

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

  5. class Node {
  6. public:
  7.     bool is_word;
  8.     int count;. 1point3acres.com/bbs
  9.     vector<Node*> children;

  10.     Node() {.1point3acres缃
  11.         is_word = false;
  12.         count = 0;. Waral 鍗氬鏈夋洿澶氭枃绔,
  13.         for(int i = 0; i < 26; i ++) {
  14.             children.push_back(NULL);
  15.         }   
  16.     }   
  17. . 1point 3acres 璁哄潧
  18.     void insert(string word) {
  19.         count ++; . 1point 3acres 璁哄潧
  20.         if(word.size() == 0) {. 鐗涗汉浜戦泦,涓浜╀笁鍒嗗湴
  21.             is_word = true;
  22.             return;
  23.         }   
  24.         int tmp = word[0]-'a';
  25.         if(children[tmp] == NULL) {
  26.             children[tmp] = new Node();
  27.         }   
  28.         children[tmp]->insert(word.substr(1));
  29.     }   . more info on 1point3acres.com

  30.     string minPrefix(string word) {
  31.         if(word.size() == 0 || count == 1) {
  32.             return "";
  33.         }   
  34.         string rst;
  35.         rst.push_back(word[0]);
  36.         rst += children[word[0]-'a']->minPrefix(word.substr(1));
  37.         return rst;
  38.     }   
  39. };. from: 1point3acres.com/bbs

  40. int main() {. visit 1point3acres.com for more.
  41.     Node* root = new Node();
  42.     root->insert("zebra");
  43.     root->insert("dog");
  44.     root->insert("duck");
  45.     root->insert("dot");

  46.     cout << root->minPrefix("zebra") << endl;
  47.     cout << root->minPrefix("dog") << endl;
  48.     cout << root->minPrefix("duck") << endl;
  49.     cout << root->minPrefix("dot") << endl;
  50. }
复制代码
回复 支持 1 反对 0

使用道具 举报

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

使用道具 举报

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

使用道具 举报

sally216 发表于 2014-10-26 10:08:12 | 显示全部楼层
难道不是trie嘛
回复 支持 反对

使用道具 举报

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.1point3acres缃
请问lz可以多解释一下:
input: ["zebra", "dog", "duck",”dot”]
output: {zebra: z, dog: do, duck: d ...

应该是这样的
input: ["zebra", "dog", "duck",”dot”]
output: {zebra: z, dog: dog, duck: du,dot:dot}
.1point3acres缃
就是找到最短的且唯一能够区别于其他单词的 前缀
回复 支持 反对

使用道具 举报

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 | 显示全部楼层
思路是不是这样啊?. 鐣欏鐢宠璁哄潧-涓浜╀笁鍒嗗湴
.1point3acres缃
扫一遍input array, 建一个trie(前缀树),搜到每个单词,向上查找,直到parent有大于一的children stop,当前node就是要找的结果。-google 1point3acres
e.g.
                                     ()
                                       |
                                    (d)
                                    /      \. 1point3acres.com/bbs
                            (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. 1point 3acres 璁哄潧
问一下,如果给的单词里有dog 也有dogg,他们的输出分别应该是什么呢?

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

使用道具 举报

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

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

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

使用道具 举报

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

你给出的例子类似:
[bearcat, bear]
{bearcat: bearc, bear: ""}

所以应该是 abbb:abbb;abb:"";ab:""
回复 支持 反对

使用道具 举报

Arthur2012 发表于 2014-10-27 12:10:07 | 显示全部楼层
happysshao 发表于 2014-10-27 11:56
你给出的例子类似:
. visit 1point3acres.com for more.
{bearcat: bearc, bear: ""}

谢谢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, 2016-12-8 18:33

Powered by Discuz! X3

© 2001-2013 Comsenz Inc. Design By HUXTeam

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