一亩三分地论坛

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

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

你们要的Twitter OA (含Java代码)

  [复制链接] |试试Instant~ |关注本帖
duziyuanyang 发表于 2016-10-31 04:32:10 | 显示全部楼层 |阅读模式

2016(10-12月) 码农类 硕士 全职@Twitter - 网上海投 - 在线笔试 |Otherfresh grad应届毕业生

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

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

x
这一周都在准备Twitter的OA,感谢地里各种好人的无私贡献,基本把最近的题都做了下,自己抽到的是3题版,time series aggregation那题不论是用treemap还是priorityQueue都只能过第1个test case,后面4个死活过不去,在一楼贴上代码,如果有好心人帮忙看下,提点建议最好了。. 1point3acres.com/bbs
另外发现这周末收到的oa比上周的题目要简单好多,所以小伙伴抓紧做吧,指不定下周题又变了。。

. Waral 鍗氬鏈夋洿澶氭枃绔,
我把自己做过的题的代码直接贴出来吧,反正之前组招面过twitter了,感觉即使再给我电面还是过不去(它家店面至少是lc68,269的难度,一题不够),不求大米不求赞,只为下周的Google电面攒个人品,希望能出个简单的或者是原题,不要遇到奇葩题...
. more info on 1point3acres.com

补充内容 (2016-11-15 04:19):
今天听说有人因为贴了oa代码被取消onsite的(后人直接全部 copy了他的代码),我开这个帖子只是希望国人能过互帮互助,毕竟从地里收益很多。但是希望大家不要照抄code,这样于你于我都不是件好事,拜托了
. Waral 鍗氬鏈夋洿澶氭枃绔,
补充内容 (2016-11-15 04:20):
据说hackerrank的后台检测代码查重机制很准,不光是twitter,今后大家做其它家的hackerrank OA也要注意,祝好运!

评分

18

查看全部评分

 楼主| duziyuanyang 发表于 2016-10-31 04:55:02 | 显示全部楼层
longest phrases in a tweet, 水题,类似unique paths, pass all test cases. 1point 3acres 璁哄潧
  1. static int maxLength(int[] a, int k) {
  2.         Queue<Integer> queue = new LinkedList<>();. 1point 3acres 璁哄潧
  3.         int sum = 0;
  4.         int maxLen = 0;
  5.         for(int cur : a){
  6.             if(sum + cur <= k){
  7.                 queue.offer(cur);
  8.                 sum += cur;
  9.             }else{      
  10.                 while(sum + cur > k){
  11.                     maxLen = Math.max(maxLen, queue.size());
  12.                     int first = queue.poll();
  13.                     sum -= first;
  14.                 }
  15.                 sum += cur;
  16.                 queue.offer(cur);
  17.                 maxLen = Math.max(maxLen, queue.size());
  18.             }
  19.         }
  20.         maxLen = Math.max(maxLen, queue.size());
  21.         return maxLen;
  22.     }
复制代码
.1point3acres缃
回复 支持 1 反对 0

使用道具 举报

 楼主| duziyuanyang 发表于 2016-10-31 04:40:16 | 显示全部楼层
information mask, pass all test cases.鐣欏璁哄潧-涓浜-涓夊垎鍦
  1. public class Solution {
  2.     //mask the email
  3.     private static String emailMask(String email){.1point3acres缃
  4.         StringBuilder sb = new StringBuilder();
  5.         sb.append("E:");
  6.         sb.append(email.charAt(0));
  7.         sb.append("*****");
  8.         int start = email.lastIndexOf('@') - 1;
  9.         sb.append(email.substring(start));. From 1point 3acres bbs
  10.         return sb.toString();
  11.     }
  12.    
  13.     //mask the phone number
  14.     private static String phoneMask(String phone){
  15.         StringBuilder sb = new StringBuilder();
  16.         sb.append("P:");
  17.         char[] arr= phone.toCharArray();
  18.         int num = 0;
  19.         for(char c : arr){
  20.             if(Character.isDigit(c)){
  21.                 num++;
  22.             }
  23.         }. 鐗涗汉浜戦泦,涓浜╀笁鍒嗗湴
  24.         int countryCode = num - 10;. from: 1point3acres.com/bbs
  25.         boolean extra = false;
  26.         if(countryCode > 0){
  27.             sb.append('+');
  28.             extra = true;
  29.         }. From 1point 3acres bbs
  30.         int cur = 0;.鐣欏璁哄潧-涓浜-涓夊垎鍦
  31.         
  32.             while(cur < arr.length && countryCode > 0){.鏈枃鍘熷垱鑷1point3acres璁哄潧
  33.                 if(Character.isDigit(arr[cur])){. Waral 鍗氬鏈夋洿澶氭枃绔,
  34.                     sb.append('*');
  35.                     countryCode--;. more info on 1point3acres.com
  36.                 }
  37.                 cur++;.1point3acres缃
  38.             }
  39.         if(extra){
  40.             sb.append('-');
  41.         }
  42.         int cnt = 0;
  43.         while(cur < arr.length && cnt < 3){. 鍥磋鎴戜滑@1point 3 acres
  44.             if(Character.isDigit(arr[cur])){
  45.                     sb.append('*');
  46.                     cnt++;
  47.             }
  48.             cur++;
  49.         }
  50.         sb.append('-');
  51.         cnt = 0;
  52.         while(cur < arr.length && cnt < 3){
  53.             if(Character.isDigit(arr[cur])){
  54.                     sb.append('*');
  55.                     cnt++;
  56.             }. 鐣欏鐢宠璁哄潧-涓浜╀笁鍒嗗湴
  57.             cur++;
  58.         }
  59.         sb.append('-');
  60.         cnt = 0;
  61.         while(cur < arr.length && cnt < 4){
  62.             if(Character.isDigit(arr[cur])){
  63.                     sb.append(arr[cur]);
  64.                     cnt++;
  65.             }
  66.             cur++;
  67.         }
  68.         return sb.toString();
  69.         
  70.     }
  71.     public static void main(String args[] ) throws Exception {.鏈枃鍘熷垱鑷1point3acres璁哄潧
  72.         /* Enter your code here. Read input from STDIN. Print output to STDOUT */
  73.         BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
  74.         String input;
  75.         while((input = br.readLine()) != null){
  76.             //String input = br.readLine();
  77.             String[] inputs = input.trim().split(":");
  78.             if(inputs[0].trim().equals("E")){
  79.                 System.out.println(emailMask(inputs[1].trim()));. 1point 3acres 璁哄潧
  80.             }else if(inputs[0].trim().equals("P")){
  81.                 System.out.println(phoneMask(inputs[1].trim()));.1point3acres缃
  82.             }. 鐣欏鐢宠璁哄潧-涓浜╀笁鍒嗗湴
  83.         }
  84.         br.close();. from: 1point3acres.com/bbs
  85.         . From 1point 3acres bbs
  86.     }
  87. }
复制代码
回复 支持 1 反对 0

使用道具 举报

 楼主| duziyuanyang 发表于 2016-10-31 04:34:47 | 显示全部楼层
Time series aggregation的代码,只能过第一个test case,感觉自己代码逻辑没问题,应该是某处小bug,傻逼hacker rank还不显示test case真是醉了。。求好心人提示下错在哪里。。. 涓浜-涓夊垎-鍦帮紝鐙鍙戝竷

  1. public class Solution {
  2.     static String beginMonth;
  3.     static String endMonth;
  4.    // static Map<String, Map<String, Integer>> logs = new TreeMap<>(Collections.reverseOrder());
  5.     static Map<String, Map<String, Integer>> logs = new HashMap<>();
  6.     static PriorityQueue<Log> maxHeap;
  7.     .1point3acres缃
  8.     static class LogComparator implements Comparator<Log>{
  9.         public int compare(Log log1, Log log2){
  10.             String date1 = log1.date;
  11.             String date2 = log2.date;
  12.             String category1= log1.category;
  13.             String category2 = log2.category;
  14.             if(date1.equals(date2)){
  15.                 return category1.compareTo(category2);
  16.             }else{
  17.                 return date2.compareTo(date1);
  18.             }
  19.         }
  20.     }
  21.    
  22.     static class Log{. from: 1point3acres.com/bbs
  23.         String date;
  24.         String category;
  25.         int cnt;. Waral 鍗氬鏈夋洿澶氭枃绔,
  26.         Log(String date, String category, int cnt){
  27.             this.date = date;
  28.             this.category = category;
  29.             this.cnt = cnt;. 涓浜-涓夊垎-鍦帮紝鐙鍙戝竷
  30.         }
  31.     }
  32.    
  33.     static String removeDD(String date){. 鐣欏鐢宠璁哄潧-涓浜╀笁鍒嗗湴
  34.         //return date;
  35.         Date initDate = null;
  36.         try{
  37.             initDate = new SimpleDateFormat("yyyy-MM-dd").parse(date);.鏈枃鍘熷垱鑷1point3acres璁哄潧
  38.         }catch (ParseException e){
  39.             e.printStackTrace();. 1point3acres.com/bbs
  40.         }
  41.         SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM");
  42.         String parsedDate = formatter.format(initDate);. 鐗涗汉浜戦泦,涓浜╀笁鍒嗗湴
  43.         return parsedDate;
  44.       
  45.     }
  46.    
  47.     static boolean isBefore(String d1, String d2){
  48.         SimpleDateFormat format = new SimpleDateFormat("yyyy-MM");
  49.         Date date1 = null;
  50.         Date date2 = null;
  51.         try{
  52.             date1 = format.parse(d1);
  53.             date2 = format.parse(d2);
  54.         }catch(ParseException e){
  55.             e.printStackTrace();
  56.         }
  57.         return date1.before(date2);
  58.     }
  59.    
  60.     public static void main(String args[] ) throws Exception {
  61.         /* Enter your code here. Read input from STDIN. Print output to STDOUT */
  62.         -google 1point3acres
  63.         String line = null;
  64.         int num = 0;
  65.         try{
  66.             BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
  67.             
  68.             while((line = br.readLine()) != null){
  69.                 if(num == 0){
  70.                     String[] interval = line.trim().split(",");. From 1point 3acres bbs
  71.                     if(interval.length != 2){.1point3acres缃
  72.                         throw new Exception("invalid input!");. from: 1point3acres.com/bbs
  73.                     }
  74.                     beginMonth = interval[0].trim();
  75.                     endMonth = interval[1].trim();-google 1point3acres
  76.                     //System.out.println(line);
  77.                      num++;
  78.                 }else if(num == 1){
  79.                      num++;
  80.                     continue;
  81.                      鏉ユ簮涓浜.涓夊垎鍦拌鍧.
  82.                 }else{
  83.                     //System.out.println(line);
  84.                     String[] lines = line.trim().split(",");
  85.                     if(lines.length != 3){
  86.                         throw new Exception("invalid input!");
  87.                     }
  88.                     String date = lines[0].trim();
  89.                     //System.out.println(date);
  90.                     String trans_date = removeDD(date);
  91.                     //System.out.println(trans_date);
  92.                     String category = lines[1].trim();
  93.                     String count = lines[2].trim();
  94.                     int cnt = Integer.parseInt(count);. 1point3acres.com/bbs
  95.                     //System.out.println(date);. 1point 3acres 璁哄潧
  96.                     if(isBefore(trans_date, beginMonth) || isBefore(endMonth, trans_date) || cnt == 0) continue;
  97.                     if(!logs.containsKey(trans_date)){
  98.                         logs.put(trans_date, new HashMap<String, Integer>());-google 1point3acres
  99.                     }. from: 1point3acres.com/bbs
  100.                     Map<String, Integer> map = logs.get(trans_date);
  101.                     if(!map.containsKey(category)){
  102.                         map.put(category, cnt);. 1point 3acres 璁哄潧
  103.                     }else{
  104.                         map.put(category, map.get(category) + cnt);
  105.                     }
  106.                     
  107.                     logs.put(trans_date,map);
  108.                      num++;
  109.                 }
  110.                
  111.             }
  112.         }catch (Exception e){
  113.             e.printStackTrace();
  114.         }
  115.         
  116.         maxHeap = new PriorityQueue<Log>(num, new LogComparator());.鏈枃鍘熷垱鑷1point3acres璁哄潧
  117. . 涓浜-涓夊垎-鍦帮紝鐙鍙戝竷
  118.        for(Map.Entry<String, Map<String, Integer>> entry : logs.entrySet()){
  119.            
  120.             String date = entry.getKey();. 1point 3acres 璁哄潧
  121.             //System.out.println(date);
  122.             Map<String, Integer> map = entry.getValue();. 鐣欏鐢宠璁哄潧-涓浜╀笁鍒嗗湴
  123.             
  124.             for(Map.Entry<String, Integer> sub_entry : map.entrySet()){. Waral 鍗氬鏈夋洿澶氭枃绔,
  125.               String category = sub_entry.getKey();
  126.               int cnt= sub_entry.getValue();
  127.               maxHeap.offer(new Log(date, category, cnt));
  128.                 //System.out.println(date + " "  + category +  " " + cnt);
  129.             }
  130.        }
  131.         
  132.         Log prev = null;
  133.         StringBuilder sb = new StringBuilder();
  134.         while(!maxHeap.isEmpty()){
  135.             Log cur = maxHeap.poll();. 鍥磋鎴戜滑@1point 3 acres
  136.             if(prev == null){
  137.                 sb.append(cur.date);
  138.                 sb.append(',');
  139.                 sb.append(' ');.鐣欏璁哄潧-涓浜-涓夊垎鍦
  140.                 sb.append(cur.category);
  141.                 sb.append(',');
  142.                 sb.append(' ');
  143.                 sb.append(cur.cnt);. 涓浜-涓夊垎-鍦帮紝鐙鍙戝竷
  144.             }else if(prev.date.equals(cur.date)){
  145.                 sb.append(',');
  146.                 sb.append(' ');
  147.                 sb.append(cur.category);
  148.                 sb.append(',');
  149.                 sb.append(' ');
  150.                 sb.append(cur.cnt);
  151.             }else{
  152.                 String printString = sb.toString();.鐣欏璁哄潧-涓浜-涓夊垎鍦
  153.                 System.out.println(printString);
  154.                 sb = new StringBuilder();
  155.                 sb.append(cur.date);
  156.                 sb.append(',');.1point3acres缃
  157.                 sb.append(' ');
  158.                 sb.append(cur.category);. 鍥磋鎴戜滑@1point 3 acres
  159.                 sb.append(',');
  160.                 sb.append(' ');. from: 1point3acres.com/bbs
  161.                 sb.append(cur.cnt);
  162.             }
  163.             prev = cur;. Waral 鍗氬鏈夋洿澶氭枃绔,
  164.         }
  165.         String printString = sb.toString();. from: 1point3acres.com/bbs
  166.         System.out.println(printString);
  167.       /*
  168.         for(Map.Entry<String, Map<String, Integer>> entry : logs.entrySet()){. From 1point 3acres bbs
  169.             StringBuilder sb = new StringBuilder();
  170.             String date = entry.getKey();
  171.             sb.append(date);
  172.             Map<String, Integer> map = entry.getValue();
  173.             . 鐣欏鐢宠璁哄潧-涓浜╀笁鍒嗗湴
  174.             for(Map.Entry<String, Integer> sub_entry : map.entrySet()){
  175.               String category = sub_entry.getKey();. 1point3acres.com/bbs
  176.               int cnt= sub_entry.getValue();
  177.               sb.append(',');
  178.               sb.append(' ');
  179.               sb.append(category);
  180.               sb.append(',');
  181.               sb.append(' ');. 鐣欏鐢宠璁哄潧-涓浜╀笁鍒嗗湴
  182.               sb.append(cnt);
  183.             }
  184.             System.out.println(sb.toString());
  185.         }
  186.     */
  187.     }. 涓浜-涓夊垎-鍦帮紝鐙鍙戝竷
  188. }
复制代码
回复 支持 1 反对 0

使用道具 举报

EkoLanWei 发表于 2016-10-31 05:22:03 | 显示全部楼层
求发邮箱 hongruzh@gmail.com 楼主好人 楼主一身平安
回复 支持 0 反对 1

使用道具 举报

 楼主| duziyuanyang 发表于 2016-11-5 04:54:41 | 显示全部楼层
liu.haonan 发表于 2016-11-5 04:19
请问一下楼主,这个key一定会是2512208吗?还是不同的testcase会有不同的key?. 鐗涗汉浜戦泦,涓浜╀笁鍒嗗湴
如果key不相同的话,在不 ...

1.不同case的key不一样
2.signature不一定有循环key,最坏情况signature就是一个key,你要做的就是去check是否有循环key, 重新加密的时候能得到给你的string
回复 支持 1 反对 0

使用道具 举报

elizabethxiazhi 发表于 2016-10-31 06:04:23 | 显示全部楼层
LZ人真好,刚花了两个多小时写twitter,time series 那个题目过了, 我开始也只过一个case,后来用treemap<time, treemap<engagement, count>>做的就都过去了。。。(原来用的treemap<time,List<>()>).....
回复 支持 1 反对 0

使用道具 举报

 楼主| duziyuanyang 发表于 2016-10-31 04:35:55 | 显示全部楼层
Orders 1的SQL代码,passed all test case
  1. select o.customerNumber as customer
  2. from ORDERS as o
  3. group by customerNumber
  4. order by count(orderNumber) desc
  5. limit 1;
复制代码
回复 支持 反对

使用道具 举报

 楼主| duziyuanyang 发表于 2016-10-31 04:36:39 | 显示全部楼层
parent, child, tree那题,选Oracle, pass all test case
  1. SELECT
  2.     Id,
  3.     CASE . 鐣欏鐢宠璁哄潧-涓浜╀笁鍒嗗湴
  4.         WHEN M IS NULL THEN 'Leaf'
    -google 1point3acres
  5.         WHEN P_id IS NULL THEN 'Root'
  6.         ELSE 'Inner'
  7.     END AS TypeNode
  8. FROM(
  9.     SELECT
  10.         DISTINCT hijo.*, padre.P_id as M. 1point 3acres 璁哄潧
  11.     FROM Tree hijo
    . from: 1point3acres.com/bbs
  12.     LEFT JOIN Tree padre ON(hijo.Id = padre.P_id)
  13. )ORDER BY Id;
复制代码
回复 支持 反对

使用道具 举报

 楼主| duziyuanyang 发表于 2016-10-31 04:38:55 | 显示全部楼层
employee, department题, 自己没遇到,不过同学试了通过了
  1. select d.Name, count(e.ID) as ID_COUNT
  2. from Department d. Waral 鍗氬鏈夋洿澶氭枃绔,
  3. left join Employee e
  4. on e.DEPT_ID = d.DEPT_ID
  5. group by d.Name
  6. order by ID_COUNT desc, NAME
复制代码
回复 支持 反对

使用道具 举报

sccnju 发表于 2016-10-31 04:41:36 | 显示全部楼层
谢谢楼主。我跟楼主一样也是只能过第一个test case。。醉了。。。看了下楼主的code觉得没什么毛病。。。。

再次吐槽一下居然不给看test case。。。。
回复 支持 反对

使用道具 举报

 楼主| duziyuanyang 发表于 2016-10-31 04:52:46 | 显示全部楼层
encrypt and decrypt message, 这题搞了我一晚上时间,结果点开oa发现没有这题。。anyway,我的代码自己拿case跑了一下,如果有问题欢迎指正
  1. static String getKey(String tweets, String signature){
  2.     char[] sig_arr = signature.toCharArray();
  3.     char[] twe_arr = tweets.toCharArray();
  4. . 鍥磋鎴戜滑@1point 3 acres
  5.     int letter_len = 0;
  6.     for(char c : sig_arr){
  7.       if(Character.isLetter(c)) letter_len++;
  8.     }-google 1point3acres
  9.     char[] keys = new char[letter_len]; 鏉ユ簮涓浜.涓夊垎鍦拌鍧.

  10.     int sig_cur = sig_arr.length - 1;
  11.     int twe_cur = twe_arr.length - 1;. 鐣欏鐢宠璁哄潧-涓浜╀笁鍒嗗湴
  12.     letter_len--;
  13.     while(sig_cur >= 0){
  14.       if(Character.isLetter(sig_arr[sig_cur])){
  15.         char sig = sig_arr[sig_cur];
  16.         char twe = twe_arr[twe_cur];
  17.         int tmp  = sig - twe;
  18.         //System.out.println(-tmp);. more info on 1point3acres.com
  19.         int offset = (twe - sig) < 0 ? (twe + 26 - sig) : (twe - sig);
  20.         keys[letter_len] = (char)('0' + offset);
  21.         letter_len--;
  22.       }
  23.       sig_cur--;
  24.       twe_cur--;
  25.     }

  26.     String short_key = shortenKey(new String(keys));
  27.    
  28.     for(int i = 1; i < short_key.length(); i++){
  29.       StringBuilder key_builder = new StringBuilder();
  30.       key_builder.append(short_key.substring(i));
  31.       key_builder.append(short_key.substring(0, i));
  32.       String tmp_key = key_builder.toString();
  33.       String new_tweets = decrypt(tweets, tmp_key);
  34.       if(new_tweets.substring(new_tweets.length() - signature.length()).equals(signature)){
  35.         return tmp_key;
  36.       }
  37.     }
  38.     return "";
  39.   }

  40.   static String shortenKey(String keys){.鏈枃鍘熷垱鑷1point3acres璁哄潧
  41.     String reverse_keys = reverse(keys);
  42.     int end = 1;//end == 7
  43.     String tmp_key = "";
  44.     while(end < reverse_keys.length()){
  45.       tmp_key = reverse_keys.substring(0, end);////2802215
  46.       int tmp_len = tmp_key.length();//7
  47.       int tmp_begin = end ;//. more info on 1point3acres.com
  48.       while(tmp_begin + tmp_len <= reverse_keys.length()){
  49.         if(!tmp_key.equals(reverse_keys.substring(tmp_begin, tmp_begin + tmp_len))){
  50.           break;
    . From 1point 3acres bbs
  51.         }else{
  52.           tmp_begin += tmp_len;
  53.         }
  54.       }

  55.       if(tmp_begin + tmp_len <= reverse_keys.length()){
  56.         end++;. From 1point 3acres bbs
  57.       }else{
  58.         int i = 0;
  59.         while(tmp_begin < reverse_keys.length() && reverse_keys.charAt(tmp_begin) == tmp_key.charAt(i)){
    . Waral 鍗氬鏈夋洿澶氭枃绔,
  60.           i++;
  61.           tmp_begin++;
  62.         }
  63.         if(tmp_begin == reverse_keys.length()){
  64.           return reverse(tmp_key);
  65.         }else{
    . 1point 3acres 璁哄潧
  66.           end++;
  67.         }.1point3acres缃
  68.       }
  69.     }. visit 1point3acres.com for more.
  70.     return reverse(tmp_key);
  71.   }
  72.   static String reverse(String s){
  73.     char[] arr = s.toCharArray();
  74.     int begin = 0, end = arr.length - 1;
  75.     while(begin < end){. From 1point 3acres bbs
  76.       char tmp  = arr[begin];
  77.       arr[begin] = arr[end];. Waral 鍗氬鏈夋洿澶氭枃绔,
  78.       arr[end] = tmp;
  79.       begin++;
  80.       end--;
  81.     }
  82.     return new String(arr);
  83.   }

  84.   static String decrypt(String tweets, String key){
  85.     char[] key_arr = key.trim().toCharArray();
  86.     int len = key_arr.length;
  87. .鏈枃鍘熷垱鑷1point3acres璁哄潧
  88.     char[] tweets_arr = tweets.toCharArray();
  89.     int letter = 0;. From 1point 3acres bbs
  90.     for(int i = 0; i< tweets_arr.length; i++){. Waral 鍗氬鏈夋洿澶氭枃绔,
  91.       if(Character.isLetter(tweets_arr[i])){
  92.         boolean upper = Character.isUpperCase(tweets_arr[i]);
  93.         int offset = key_arr[letter % len] - '0';. more info on 1point3acres.com
  94.         tweets_arr[i] = (char)(tweets_arr[i] - offset);
  95.         if(upper && tweets_arr[i] < 'A'){
  96.           tweets_arr[i] += 26;
  97.         }
  98.         if(!upper && tweets_arr[i] < 'a'){
  99.           tweets_arr[i] += 26;
  100.         }
  101.         letter++;
  102.       }
  103.     }
  104.     return new String(tweets_arr);
  105.   }
复制代码
回复 支持 反对

使用道具 举报

 楼主| duziyuanyang 发表于 2016-10-31 04:54:06 | 显示全部楼层
expression tree,这题我自己也没遇到,不过貌似是个高频题,贴上代码欢迎讨论,因为没有跑过hackerrank,不保证能pass all test case
  1. static String experssionTree(String string){
  2.   String[] input = string.trim().split("/");
  3.   String expression = input[0];
  4.   String operation = input[1];
  5.   for(char op : operation.toCharArray()){
  6.     if(op == 'R'){
  7.       expression = reverse(expression);
  8.     }
  9.     if(op == 'S'){
  10.       expression = simplify(expression);
  11.     }.鐣欏璁哄潧-涓浜-涓夊垎鍦
  12.   }.1point3acres缃
  13.   return expression;
  14. }
  15. static String reverse(String s){
  16.   char[] arr = s.toCharArray();
  17.   int begin = 0, end = arr.length - 1;. From 1point 3acres bbs
  18.   while(begin < end){
  19.     char tmp = arr[begin];
  20.     arr[begin] = arr[end];-google 1point3acres
  21.     arr[end] = tmp;. 鐗涗汉浜戦泦,涓浜╀笁鍒嗗湴
  22.     if(arr[begin] == '('){
  23.       arr[begin] = ')';
  24.     }else if(arr[begin] == ')'){
  25.       arr[begin] = '(';  
  26.     }
  27.     if(arr[end] == '('){
  28.       arr[end] = ')';
  29.     }else if(arr[end] == ')'){
  30.       arr[end] = '(';  
  31.     }
  32.     begin++;
  33.     end--;
  34.   }
  35.   return new String(arr);
  36. }
  37. static String simplify(String s){
  38.   boolean firstLeft = true;
  39.   char[] arr = s.toCharArray();
  40.   Stack<Integer> stk = new Stack<>();. 鐣欏鐢宠璁哄潧-涓浜╀笁鍒嗗湴
  41.   List<Integer> index = new ArrayList<>();
  42.   for(int i = arr.length - 1; i >= 0; i --){
  43.     if(arr[i] == ')'){
  44.       stk.push(i);.鐣欏璁哄潧-涓浜-涓夊垎鍦
  45.     }
  46.     if(arr[i] == '('){
  47.       int rightIndex = stk.pop();. 鐗涗汉浜戦泦,涓浜╀笁鍒嗗湴
  48.       if(firstLeft == true){
  49.         int leftIndex = i;
  50.         index.add(rightIndex);. visit 1point3acres.com for more.
  51.         index.add(leftIndex);
  52.         firstLeft = false;
  53.       }else{
  54.         if(stk.isEmpty()){
  55.           firstLeft = true;
  56.         }
  57.       }
  58.     }
  59.   }

  60.   StringBuilder sb = new StringBuilder(s);
  61.   Iterator<Integer> iterator = index.iterator();
  62.   while(iterator.hasNext()){
  63.     int id = iterator.next();.鐣欏璁哄潧-涓浜-涓夊垎鍦
  64.     sb = sb.deleteCharAt(id );
  65.   }
  66.   return sb.toString();. more info on 1point3acres.com
  67. }
复制代码
回复 支持 反对

使用道具 举报

 楼主| duziyuanyang 发表于 2016-10-31 04:56:09 | 显示全部楼层
DNA序列那题LC最新的433已经出来了,大家可以去做下,思路跟word ladder是一样的,总体也不是很难。
回复 支持 反对

使用道具 举报

路未翎 发表于 2016-10-31 05:00:07 | 显示全部楼层
楼主好人!请收下膝盖!!!祝下周谷歌面试过过过!!昨天刚整理完地里的题写了两题,准备今天继续写来着
回复 支持 反对

使用道具 举报

 楼主| duziyuanyang 发表于 2016-10-31 05:00:09 | 显示全部楼层
还有几题除了log parser看地里吐槽test case过不去的,其它总体来说都不是很难,只是hackerrank看不见test case,所以有时候一个人不一定能想到,如果能有人一起讨论下就更好啦,毕竟感觉twitter oa不是侧重考算法。。. From 1point 3acres bbs

各位加油!
回复 支持 反对

使用道具 举报

 楼主| duziyuanyang 发表于 2016-10-31 05:05:22 | 显示全部楼层
sccnju 发表于 2016-10-31 04:41
谢谢楼主。我跟楼主一样也是只能过第一个test case。。醉了。。。看了下楼主的code觉得没什么毛病。。。。
...
.鏈枃鍘熷垱鑷1point3acres璁哄潧
是啊,不给看test case真是很操蛋。。
回复 支持 反对

使用道具 举报

 楼主| duziyuanyang 发表于 2016-10-31 05:06:01 | 显示全部楼层
路未翎 发表于 2016-10-31 05:00
楼主好人!请收下膝盖!!!祝下周谷歌面试过过过!!昨天刚整理完地里的题写了两题,准备今天继续写来着{: ...

借你吉言!也祝你好运啦,抽到简单题过过过
回复 支持 反对

使用道具 举报

rebecca1111 发表于 2016-10-31 05:13:57 | 显示全部楼层
mark 楼主好人,祝福狗家顺利
回复 支持 反对

使用道具 举报

本版积分规则

请点这里访问我们的新网站:一亩三分地Instant.

Instant搜索更强大,不扣积分,内容组织的更好更整洁!目前仍在beta版本,努力完善中!反馈请点这里

关闭

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

手机版|小黑屋|一亩三分地论坛声明 ( 沪ICP备11015994号 )

custom counter

GMT+8, 2016-12-10 13:35

Powered by Discuz! X3

© 2001-2013 Comsenz Inc. Design By HUXTeam

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