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

SNAPCHAT电面挂经

🔗
 楼主| ariesxiao 2016-9-9 05:24:01 | 只看该作者
全局:
maktf 发表于 2016-9-8 22:43
求问楼主从面完到有消息用了多久啊?而且他家的店面到底是45分钟还是一个小时?

早上面的,下午就有消息了,问了一下内部的朋友,说最近SNAPCHAT在谈IPO,为了防止有人进去混股票,BAR高了很多,ANYWAY,MOVE FORWARD了
回复

使用道具 举报

🔗
pawprinter 2016-9-14 12:33:40 | 只看该作者
全局:
请问需要考虑顺序吗?输出是list吗?{GAT, DOC} 和 {DOC, GAT} 算几个?
回复

使用道具 举报

🔗
todayand 2016-9-20 08:41:07 | 只看该作者
全局:
因为顺序不重要,所以可以将INPUT STRING ARRAY 2里的string先sort,建个hashmap存sorted string对应原string
对sorted string建Trie,这样可以方便之后搜索

然后对INPUT STRING ARRAY 1, count each char in it,然后就是dfs找出所有可能组合啦
回复

使用道具 举报

🔗
myangelasuka 2016-9-20 18:45:43 | 只看该作者
全局:
大概写了一个。 要backtrack input2 而不是input1
  1. public List<List<String>> wordSearch (String[] input1, String[] input2) {
  2.                 /*
  3.                  * 题大概是这样,一个INPUT STRING ARRAY1 比如CAT, DOG,一个INPUT STRING ARRAY 2, 比如GAT, DOC, CD, GOAT, BAD, COOL
  4.                  * 要求第一个INPUT ARRAY的字母必须全部用,而且每个字母只能用一次,求其能组合成的INPUT STRING ARRAY2里的单词组
  5.                  * 比如上面这个例子,返回值会是{{GAT, DOC},{CD, GOAT}}
  6.                  */
  7.                 //edge cases
  8.                 List<List<String>> ret = new ArrayList<>();
  9.                 StringBuilder input1B = new StringBuilder();
  10.                 for (String s : input1) {
  11.                         char[] arr = s.toCharArray();
  12.                         for (char ch : arr) {
  13.                                 input1B.append(ch);
  14.                         }
  15.                 }
  16.                 backtracking (ret, new ArrayList<String>(), 0 ,input1B.toString().toCharArray(), input2);
  17.                 return ret;
  18.         }
  19.        
  20.         private void backtracking (List<List<String>> ret, List<String> temp, int start, char[] input1, String[] input2) {
  21.                 if (isAnagram(input1, temp)) {
  22.                         ret.add(new ArrayList<>(temp));
  23.                 } else {
  24.                         for (int i = start; i < input2.length; i++) {
  25.                                 temp.add(input2[i]);
  26.                                 backtracking (ret, temp, i+1, input1, input2);
  27.                                 temp.remove(temp.size()-1);
  28.                         }
  29.                 }
  30.         }
  31.        
  32.         private boolean isAnagram (char[] str1, List<String> temp) {
  33.                 int[] trie = new int[26];
  34.                 for (char c : str1) {
  35.                         trie[c-'A']++;
  36.                 }
  37.                 for (String s : temp) {
  38.                         for (int i = 0; i < s.length(); i++) {
  39.                                 trie[s.charAt(i)-'A']--;
  40.                         }
  41.                 }
  42.                 for (int i : trie) {
  43.                         if (i != 0) return false;
  44.                 }
  45.                 return true;
  46.         }
复制代码
回复

使用道具 举报

🔗
白丁117 2016-9-25 11:00:29 | 只看该作者
全局:
感觉没必要用trie...dfs + 剪枝可以把 hashmap<char, int> map l取array1 word总长度, 每次l-- int=0时 map.remove(char), l<array2 中word length时,return
想不出啥优化,等大牛>.
回复

使用道具 举报

🔗
todayand 2016-9-25 11:17:38 | 只看该作者
全局:
您好!
本帖隐藏的内容需要积分高于 100 才可浏览
您当前积分为 0。
使用VIP即刻解锁阅读权限或查看其他获取积分的方式
游客,您好!
本帖隐藏的内容需要积分高于 100 才可浏览
您当前积分为 0。
VIP即刻解锁阅读权限查看其他获取积分的方式
Unlock interview details and practice with AI
Curated Interview Questions from Top Companies
回复

使用道具 举报

🔗
xietao0221 2016-9-25 12:01:03 | 只看该作者
全局:
如果不用trie的写了这么一个。用trie的还没想,一会儿想想。
  1. public class Solution {
  2.     private List<List<String>> res = new ArrayList<>();
  3.     private List<String> tmpRes = new ArrayList<>();
  4.     private int charSum = 0;
  5.     private int[] charSet = new int[26];

  6.     public List<List<String>> wordSearch(String[] input1, String[] input2) {
  7.         // build charSet
  8.         for(String word: input1) {
  9.             for(char c: word.toCharArray()) {
  10.                 charSet[c - 'A']++;
  11.                 charSum++;
  12.             }
  13.         }

  14.         wordSearchHelper(input2, 0, 0);
  15.         return res;
  16.     }

  17.     private void wordSearchHelper(String[] input2, int pos, int count) {
  18.         if(count > charSum) return;

  19.         if(count == charSum) {
  20.             int[] tmpCharSum = Arrays.copyOf(charSet, 26);
  21.             for(String word: tmpRes) {
  22.                 for(char c: word.toCharArray()) {
  23.                     if (--tmpCharSum[c - 'A'] < 0) return;
  24.                 }
  25.             }
  26.             res.add(new ArrayList<>(tmpRes));
  27.             return;
  28.         }

  29.         for(int i = pos; i < input2.length; i++) {
  30.             tmpRes.add(input2[i]);
  31.             wordSearchHelper(input2, i + 1, count + input2[i].length());
  32.             tmpRes.remove(tmpRes.size() - 1);
  33.         }
  34.     }
  35. }
复制代码

评分

参与人数 2大米 +15 收起 理由
高渐离击筑高歌 + 5 给你点个赞!
忆梦前尘 + 10 回答的很好!

查看全部评分

回复

使用道具 举报

无效楼层,该帖已经被删除
全局:
您好!
本帖隐藏的内容需要积分高于 100 才可浏览
您当前积分为 0。
使用VIP即刻解锁阅读权限或查看其他获取积分的方式
游客,您好!
本帖隐藏的内容需要积分高于 100 才可浏览
您当前积分为 0。
VIP即刻解锁阅读权限查看其他获取积分的方式
Unlock interview details and practice with AI
Curated Interview Questions from Top Companies
回复

使用道具 举报

🔗
freemail165 2016-10-10 06:13:34 | 只看该作者
全局:
您好!
本帖隐藏的内容需要积分高于 100 才可浏览
您当前积分为 0。
使用VIP即刻解锁阅读权限或查看其他获取积分的方式
游客,您好!
本帖隐藏的内容需要积分高于 100 才可浏览
您当前积分为 0。
VIP即刻解锁阅读权限查看其他获取积分的方式
Unlock interview details and practice with AI
Curated Interview Questions from Top Companies
回复

使用道具 举报

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

本版积分规则

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