楼主: yvetterowe
跳转到指定楼层
上一主题 下一主题
收起左侧

dropbox面经 (已挂T T)

🔗
 楼主| yvetterowe 2014-10-8 10:43:39 | 只看该作者
全局:
asdfg 发表于 2014-10-8 10:36
我面了周日的到现在还没消息……也是出了个bug被举了反例才改对,看来有点不妙……

我觉得我的还很有可能是代码不够精简。。。anyway, good luck!
回复

使用道具 举报

🔗
jason51122 2014-10-8 10:45:08 | 只看该作者
全局:
楼主有G的return offer吗
回复

使用道具 举报

🔗
qiaokan 2014-10-8 11:27:11 | 只看该作者
本楼:
全局:
女神来了
回复

使用道具 举报

🔗
qiaokan 2014-10-8 12:10:15 | 只看该作者
全局:
set可以不用,可以传index减少copy
有很多branch可以减少。
据trow说,这种提出来就行,写代码写出来费时间

补充内容 (2014-10-9 12:04):
linkedin一直没消息,hr说现在人多。你呢

点评

谢kan神指点!  发表于 2014-10-9 09:49
回复

使用道具 举报

🔗
Interviwer 2014-10-8 15:36:15 | 只看该作者
全局:
思路应该差不多,楼主你是直接在纸上写的吗?这要是在纸上写,改来改去得乱成什么样啊
  1. bool match(string pattern, string data, unordered_map<char, string> &lookup, unordered_set<string> &used) {
  2.     if(pattern.size() == 0 && data.size() == 0)     return true;
  3.     if(pattern.size() == 0 || data.size() == 0)     return false;

  4.     unordered_map<char, string>::iterator it;
  5.     it = lookup.find(pattern[0]);

  6.     if(it != lookup.end()) {
  7.         string word = it->second;
  8.         if(data.size() < word.size() || data.substr(0, word.size()) != word) {
  9.             return false;
  10.         }else {
  11.             return match2(pattern.substr(1), data.substr(word.size()), lookup, used);
  12.         }   
  13.     }else {
  14.         for(int len = 1; len <= data.size(); len ++) {
  15.             string new_word = data.substr(0, len);
  16.             if(used.find(new_word) != used.end()) {
  17.                 continue;                 
  18.             }else {
  19.                 used.insert(new_word);
  20.                 lookup[pattern[0]] = new_word;
  21.                 if(match2(pattern.substr(1), data.substr(new_word.size()), lookup, used)) {
  22.                     return true;
  23.                 }           
  24.                 lookup.erase(pattern[0]);
  25.                 used.erase(new_word);
  26.             }   
  27.         }   
  28.     }   

  29.     return false;
  30. }
复制代码
一亩三分地严打"顶""好贴""收藏了"之类的垃圾回复帖!被警告三次,系统会自动封杀ID!

想支持楼主,请点击帖子下方的"好苗""分享""收藏"键,酌情给楼主加大米(系统不扣你自己的分)。
积分不够看不了帖子,请参考论坛导航里的"帮助","新手提纲"里有攒积分指南

点评

on campus时让自己电脑过去的。。在电脑上coding的  发表于 2014-10-9 09:49
回复

使用道具 举报

🔗
liuzhe1218 2014-10-10 07:55:06 | 只看该作者
全局:
dropbox的面试题还是挺有意思的,我的思路就是dfs,不过这个题要在短时间内一次写完不容易啊。求指教。。
  1. boolean isMatch = false;
  2.         HashMap<Character, String> dict = new HashMap<Character,String>();
  3.         public boolean match2(String pattern, String data){
  4.                 if (pattern.length() == 0 && data.length() == 0)
  5.                         return true;
  6.                 if (pattern.length() == 0 || data.length() == 0)
  7.                         return false;
  8.                 HashMap<Character, String> map = new HashMap<Character, String>();
  9.                 dfs(pattern,data,map,'a');
  10.                 return isMatch;
  11.         }
  12.         public void dfs(String pattern, String data, HashMap<Character, String> map,char max){
  13.                 if (pattern.length() == 0){
  14.                         if (data.length() == 0){
  15.                                 dict = new HashMap<Character,String>(map);
  16.                                 isMatch = true;
  17.                         }
  18.                         return;
  19.                 }
  20.                 int i;
  21.                 String str;
  22.                 // match first, then do the recursion
  23.                 if (map.containsKey(pattern.charAt(0))){
  24.                         str = map.get(pattern.charAt(0));
  25.                         if (str.length() > data.length() || !str.equals(data.substring(0, str.length())))
  26.                                 return;
  27.                         dfs(pattern.substring(1),data.substring(str.length()),map,max);
  28.                 }
  29.                 else{
  30.                         for (i=1;i<data.length()-pattern.length()+2;i++){
  31.                                 str = data.substring(0,i);
  32.                                 map.put(max, str);
  33.                                 dfs(pattern.substring(1),data.substring(i),map,(char)(max+1));
  34.                                 map.remove(max);
  35.                         }
  36.                 }
  37.         }
复制代码
回复

使用道具 举报

🔗
shinichish 2014-11-5 04:36:07 | 只看该作者
全局:
请问第二题直接动归可以做吗?
回复

使用道具 举报

🔗
sailorconan 2014-11-5 07:04:59 | 只看该作者
全局:
  1. static boolean match(int i, int j, String p, String s, Map<Character, String> map) {
  2.                 int len1 = p.length(), len2 = s.length();

  3.                 if (i == len1) {
  4.                         if (j == len2)
  5.                                 return true;
  6.                         else
  7.                                 return false;
  8.                 } else if (j >= len2)
  9.                         return false;

  10.                 char c = p.charAt(i);
  11.                 if (map.containsKey(c)) {
  12.                         String val = map.get(c);
  13.                         int len = val.length();
  14.                         if (j + len <= len2 && s.substring(j, j + len).equals(val)) {
  15.                                 if (match(i + 1, j + len, p, s, map)) {
  16.                                         return true;
  17.                                 }
  18.                         } else {
  19.                                 return false;
  20.                         }
  21.                 } else {// no such key, k=end
  22.                         for (int k = j; k < len2; ++k) {
  23.                                 String str = s.substring(j, k + 1);// possible word
  24.                                 map.put(c, str);
  25.                                 if (match(i + 1, k + 1, p, s, map)) {
  26.                                         return true;
  27.                                 } else {
  28.                                         map.remove(c);
  29.                                 }

  30.                         }

  31.                 }
  32.                 return false;
  33.         }
复制代码
思路都差不多
回复

使用道具 举报

🔗
shinichish 2014-11-5 15:34:27 | 只看该作者
全局:
刚提交了代码。做法是dfs + 剪枝。
回复

使用道具 举报

🔗
 楼主| yvetterowe 2014-11-5 23:44:25 | 只看该作者
全局:
shinichish 发表于 2014-11-5 04:36
请问第二题直接动归可以做吗?

我一开始尝试用dp,面试官提示说太复杂然后我就用dfs了。。。如果能写出来应该也行吧
回复

使用道具 举报

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

本版积分规则

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