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

airbnb 电面 及两种解法

🔗
匿名用户-2MQTN  2019-7-1 08:44:49 |倒序浏览

2019(4-6月) 码农类General 硕士 全职@airbnb - 内推 - 技术电面  | | Pass | 在职跳槽

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

您需要 登录 才可以下载或查看附件。没有帐号?注册账号

x
目前airbnb的面试正在做一些改革,过了电面之后安排onsite, onsite是分两天,第一天面design, coding, experience, pass了再去面cross functional。安排了第二轮onsite还没去,等onsite都面完了再来汇报。先来个电面经验
您好!
本帖隐藏的内容需要积分高于 188 才可浏览
您当前积分为 0。
使用VIP即刻解锁阅读权限或查看其他获取积分的方式
游客,您好!
本帖隐藏的内容需要积分高于 188 才可浏览
您当前积分为 0。
VIP即刻解锁阅读权限查看其他获取积分的方式
Unlock interview details and practice with AI
Curated Interview Questions from Top Companies
啥的花了不少米QAQ:

HashMap 的
  1. /*
  2. * Copyright 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved.
  3. */

  4. import java.util.ArrayList;
  5. import java.util.Arrays;
  6. import java.util.HashMap;
  7. import java.util.List;

  8. /**
  9. * Follow up: 用trie? 什么是trie?
  10. * [url]http://www.noteanddata.com/leetcode-336-Palindrome-Pairs-airbnb-interview-problem-java-solution-note.html[/url]
  11. */

  12. public class PalindromPairs {
  13.     public List<List<Integer>> palindromePairs(String[] words){
  14.         List<List<Integer>> res = new ArrayList<>();
  15.         if(words == null || words.length == 0) return res;
  16.         HashMap<String, Integer> posMap = new HashMap<>();
  17.         for(int i=0;i<words.length; i++) {
  18.             posMap.put(words[i],i);
  19.         }

  20.         for(int i=0;i<words.length;i++) {
  21.             for(int j=0;j<=words[i].length();j++){ //j<=0 so that it handles empty string
  22.                 String sub1 = words[i].substring(0, j);
  23.                 String sub2 = words[i].substring(j);
  24.                 if(isPalin(sub1)) {
  25.                     String revSub2 = new StringBuilder(sub2).reverse().toString();
  26.                     if(posMap.containsKey(revSub2) && posMap.get(revSub2) !=i) {
  27.                         res.add(Arrays.asList(posMap.get(revSub2), i));
  28.                     }
  29.                 }
  30.                 if(isPalin(sub2) ) { //to avoid duplicate
  31.                     String revSub1 = new StringBuilder(sub1).reverse().toString();
  32.                     if(posMap.containsKey(revSub1) && posMap.get(revSub1) != i) {
  33.                         res.add(Arrays.asList(i, posMap.get(revSub1)));
  34.                     }
  35.                 }

  36.             }
  37.         }

  38.         return res;
  39.     }

  40.     private boolean isPalin(String str){
  41.         int left = 0;
  42.         int right = str.length()-1;
  43.         while(left<right) {
  44.             if(str.charAt(left++)!=str.charAt(right--)) return false;
  45.         }
  46.         return true;
  47.     }
  48. }
复制代码




Trie的

  1. /*
  2. * Copyright 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved.
  3. */

  4. import java.util.ArrayList;
  5. import java.util.Arrays;
  6. import java.util.List;

  7. public class PalindromPairsTrie {
  8.     List<List<Integer>> res = new ArrayList<>();
  9.     TrieNode root = new TrieNode();
  10.     private static class TrieNode {
  11.         TrieNode[] children;
  12.         int index;
  13.         List<Integer> list;

  14.         TrieNode() {
  15.             children = new TrieNode[26];
  16.             index = -1;
  17.             list = new ArrayList<>();
  18.         }
  19.     }

  20.     public List<List<Integer>> palindromePairs(String[] words) {

  21.         for (int i = 0; i < words.length; i++) {
  22.             insert(words[i], i);
  23.         }

  24.         for (int i = 0; i < words.length; i++) {
  25.             search(words[i], i);
  26.         }

  27.         return res;
  28.     }

  29.     private void insert(String word, int index) {
  30.         TrieNode trie = root;
  31.         for (int i = word.length() - 1; i >= 0; i--) {
  32.             int j = word.charAt(i) - 'a';

  33.             if (trie.children[j] == null) {
  34.                 trie.children[j] = new TrieNode();
  35.             }

  36.             if (isPalindrome(word, 0, i)) {
  37.                 trie.list.add(index);
  38.             }

  39.             trie = trie.children[j];
  40.         }

  41.         trie.list.add(index);
  42.         trie.index = index;
  43.     }

  44.     private void search(String word, int i) {
  45.         TrieNode trie = root;
  46.         for (int j = 0; j < word.length(); j++) { //handles when other part is shorter than words[i]
  47.             if (trie.index >= 0 && trie.index != i && isPalindrome(word, j, word.length() - 1)) {
  48.                 res.add(Arrays.asList(i, trie.index));
  49.             }

  50.             trie = trie.children[word.charAt(j) - 'a'];
  51.             if (trie == null) return; // important!!!
  52.         }

  53.         for (int j : trie.list) { //handles when other part is longer than words[i]
  54.             if (i == j) continue;
  55.             res.add(Arrays.asList(i, j));
  56.         }
  57.     }

  58.     private boolean isPalindrome(String word, int i, int j) {
  59.         while (i < j) {
  60.             if (word.charAt(i++) != word.charAt(j--)) return false;
  61.         }

  62.         return true;
  63.     }
  64. }
复制代码




评分

参与人数 5大米 +38 收起 理由
snowei0 + 1 很有用的信息!
goodluck_ccc + 3 很有用的信息!
0v0monday0v0 + 1 赞一个
匿名用户-SRNCV + 30
leixiang5 + 3 谢谢分享!

查看全部评分


上一篇:google 电面
下一篇:Bolt 面经
全局:
我的hr为什么说要面2轮phone才onsite
回复

使用道具 举报

地里匿名用户
🔗
匿名用户-2MQTN  2019-7-1 08:57:30
leixiang5 发表于 2019-7-1 08:56
我的hr为什么说要面2轮phone才onsite

你面的是哪里的组?不同的组可能不一样,我也有听说面了二轮的。求加米呀!谢谢同学。
回复

使用道具 举报

全局:
论坛匿名用户 发表于 2019/07/01 08:57:30


你面的是哪里的组?不同的组可能不一样,我也有听说面了二轮的。求加米呀!谢谢同学。

我?好像是homes吧。给米
回复

使用道具 举报

地里匿名用户
🔗
匿名用户-2MQTN  2019-7-1 09:05:01
leixiang5 发表于 2019-7-1 08:58
我?好像是homes吧。给米

地区呢?湾区那边吗~
回复

使用道具 举报

🔗
leixiang5 2019-7-1 13:15:04 | 只看该作者
全局:
论坛匿名用户 发表于 2019-7-1 09:05
地区呢?湾区那边吗~

好像是? 不记得了.😂
回复

使用道具 举报

🔗
crazycodyman 2019-7-1 13:55:09 | 只看该作者
全局:
ispalindrome可以用two pointer来做,应该是最优解了
回复

使用道具 举报

地里匿名用户
🔗
匿名用户-2MQTN  2019-7-2 08:07:36
crazycodyman 发表于 2019-7-1 13:55
ispalindrome可以用two pointer来做,应该是最优解了

在我第二个解里面应该已经写了这个方法哈
再贴一遍~
  1. private boolean isPalindrome(String word, int i, int j) {
  2.         while (i < j) {
  3.             if (word.charAt(i++) != word.charAt(j--)) return false;
  4.         }

  5.         return true;
  6.     }
复制代码
回复

使用道具 举报

🔗
leixiang5 2019-7-25 02:44:33 | 只看该作者
全局:
好像改革只适合local的. 比如飞到总部面的话. 是直接都安排在一天. 如果在西雅图. 然后面的西雅图职位. 就可以分成2天了.
回复

使用道具 举报

🔗
dibao3878 2019-8-11 13:39:04 | 只看该作者
全局:
hashmap 的那个楼主有放离抠跑过么?
回复

使用道具 举报

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

本版积分规则

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