近期论坛无法登录的解决方案


一亩三分地论坛

 找回密码
 获取更多干活,快来注册

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

Google 电面

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

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

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

您需要 登录 才可以下载或查看,没有帐号?获取更多干活,快来注册

x
新鲜出炉的google 电面

上来就是一个比较有难度的题目,感觉悲剧的节奏. visit 1point3acres.com for more.

Use the shorest unique prefix to represent each word in the array
input: ["zebra", "dog", "duck",”dot”]
output: {zebra: z, dog: do, duck: du}
. 1point 3acres 璁哄潧
[zebra, dog, duck, dove]. 涓浜-涓夊垎-鍦帮紝鐙鍙戝竷
{zebra:z, dog: dog, duck: du, dove: dov}. Waral 鍗氬鏈夋洿澶氭枃绔,

[bearcat, bear]
{bearcat: bearc, bear: ""}-google 1point3acres


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



评分

4

查看全部评分

Interviwer 发表于 2014-10-28 02:23:34 | 显示全部楼层
关注一亩三分地公众号:
Warald_一亩三分地
其实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;
  9.     vector<Node*> children;. 鍥磋鎴戜滑@1point 3 acres

  10.     Node() {
  11.         is_word = false;. 鍥磋鎴戜滑@1point 3 acres
  12.         count = 0;
  13.         for(int i = 0; i < 26; i ++) {. visit 1point3acres.com for more.
  14.             children.push_back(NULL);. visit 1point3acres.com for more.
  15.         }   
  16.     }   

  17.     void insert(string word) {
  18.         count ++; . Waral 鍗氬鏈夋洿澶氭枃绔,
  19.         if(word.size() == 0) {. 鐗涗汉浜戦泦,涓浜╀笁鍒嗗湴
  20.             is_word = true;. From 1point 3acres bbs
  21.             return;
  22.         }   
  23.         int tmp = word[0]-'a';
  24.         if(children[tmp] == NULL) {
  25.             children[tmp] = new Node();
  26.         }   
  27.         children[tmp]->insert(word.substr(1));
  28.     }   

  29.     string minPrefix(string word) {. more info on 1point3acres.com
  30.         if(word.size() == 0 || count == 1) {.1point3acres缃
  31.             return "";
  32.         }   
  33.         string rst;
  34.         rst.push_back(word[0]);
  35.         rst += children[word[0]-'a']->minPrefix(word.substr(1));
  36.         return rst;. 1point3acres.com/bbs
  37.     }   .鐣欏璁哄潧-涓浜-涓夊垎鍦
  38. };

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

  45.     cout << root->minPrefix("zebra") << endl;
  46.     cout << root->minPrefix("dog") << endl;
  47.     cout << root->minPrefix("duck") << endl;. 1point 3acres 璁哄潧
  48.     cout << root->minPrefix("dot") << endl;
  49. }
复制代码
回复 支持 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嘛
回复 支持 反对

使用道具 举报

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}. from: 1point3acres.com/bbs
谢谢啦!
回复 支持 反对

使用道具 举报

一剑终情 发表于 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”]. visit 1point3acres.com for more.
output: {zebra: z, dog: do, duck: d ...

. 鐣欏鐢宠璁哄潧-涓浜╀笁鍒嗗湴应该是这样的
input: ["zebra", "dog", "duck",”dot”]
output: {zebra: z, dog: dog, duck: du,dot:dot}

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

使用道具 举报

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 | 显示全部楼层
思路是不是这样啊?
. 1point 3acres 璁哄潧
扫一遍input array, 建一个trie(前缀树),搜到每个单词,向上查找,直到parent有大于一的children stop,当前node就是要找的结果。
e.g..鏈枃鍘熷垱鑷1point3acres璁哄潧
                                     ()
                                       |
                                    (d)
                                    /      \
                            (do)       (du)
                             /      \           \
                    (dog) (dot) (duck)
. From 1point 3acres bbs
dot 向上 do有2 children,所以 dot本身就是结果
duck-->du-->d,d有2个children,所以du就是结果
.鏈枃鍘熷垱鑷1point3acres璁哄潧

. from: 1point3acres.com/bbs
回复 支持 反对

使用道具 举报

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,想错了,要更复杂一些
. visit 1point3acres.com for more.
没错的。应该就是这样的。在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: ""}

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

使用道具 举报

Arthur2012 发表于 2014-10-27 12:10:07 | 显示全部楼层
happysshao 发表于 2014-10-27 11:56. 鍥磋鎴戜滑@1point 3 acres
你给出的例子类似:

{bearcat: bearc, bear: ""}

谢谢lz,lz一定会拿到onsite的,人品这么好!
回复 支持 反对

使用道具 举报

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

谢谢了!
回复 支持 反对

使用道具 举报

本版积分规则

关闭

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

手机版|小黑屋|一亩三分地论坛声明

custom counter

GMT+8, 2017-6-30 00:34

Powered by Discuz! X3

© 2001-2013 Comsenz Inc. Design By HUXTeam

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