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

Google 2/25 onsite面经

🔗
bobzhang2004 2016-3-4 06:09:34 | 只看该作者
全局:
写了下第二轮的代码
  1. public class StringEncodeAndDecode {
  2.        
  3.         public static void main(String[] args) {
  4.                 System.out.println(encodeForQ1("abbbbbbbbbbbbbc"));
  5.                 String enStr = encodeFollowUp("a5xbc");
  6.                 System.out.println(enStr);
  7.                 System.out.println(decodeFollowUp(enStr));
  8.         }
  9.        
  10.         public static String encodeForQ1(String str) {
  11.                 if (str == null || str.length() == 0) {
  12.                         return "";
  13.                 }
  14.                 int i = 0;
  15.                 StringBuilder sb = new StringBuilder();
  16.                 while (i < str.length()) {
  17.                         int j = i + 1;
  18.                         while (j < str.length() && str.charAt(j) == str.charAt(i)) {
  19.                                 j++;
  20.                         }
  21.                         int diff = j - i;
  22.                         String s = String.valueOf(diff) + "x"+ str.charAt(i);
  23.                         if (s.length() < diff) {
  24.                                 sb.append(s);
  25.                         } else {
  26.                                 sb.append(str.substring(i, j));
  27.                         }
  28.                         i = j;
  29.                 }
  30.                
  31.                 return sb.toString();
  32.         }
  33.        
  34.         public static String encodeFollowUp(String str) {
  35.                 if (str == null || str.length() == 0) {
  36.                         return "";
  37.                 }
  38.                 int i = 0;
  39.                
  40.                 StringBuilder sb = new StringBuilder();
  41.                 while (i < str.length()) {
  42.                         char curChar = str.charAt(i);
  43.                         int j = i + 1;
  44.                         while (j < str.length() && str.charAt(j) == curChar) {
  45.                                 j++;
  46.                         }
  47.                         int diff = j - i;
  48.                         String s = String.valueOf(diff) + "x"+ curChar;
  49.                         if (s.length() < diff || curChar == 'x' || Character.isDigit(curChar)) {
  50.                                 sb.append(s);
  51.                         } else {
  52.                                 sb.append(str.substring(i, j));
  53.                         }
  54.                         i = j;
  55.                 }
  56.                
  57.                 return sb.toString();
  58.         }
  59.        
  60.         // a1x51xxbc
  61.         public static String decodeFollowUp(String str) {
  62.                 if (str == null || str.length() == 0) {
  63.                         return "";
  64.                 }
  65.                 int i = 0;
  66.                 StringBuilder sb = new StringBuilder();
  67.                 while (i < str.length()) {
  68.                         int index = str.indexOf('x', i);
  69.                         if (index == -1) {
  70.                                 sb.append(str.substring(i));
  71.                                 break;
  72.                         } else {
  73.                                 int j = index - 1;
  74.                                 while (j >= i && Character.isDigit(str.charAt(j))) {
  75.                                         j--;
  76.                                 }
  77.                                 if (j >= i) {
  78.                                         sb.append(str.substring(i, j + 1));
  79.                                 }
  80.                                 int count = Integer.valueOf(str.substring(j + 1, index));
  81.                                 for (int k = 0; k < count; k++) {
  82.                                         sb.append(str.charAt(index + 1));
  83.                                 }
  84.                                 i = index + 2;
  85.                         }
  86.                 }
  87.                
  88.                 return sb.toString();
  89.         }
  90.        
  91. }
复制代码
回复

使用道具 举报

🔗
ninacc 2016-3-4 13:30:45 | 只看该作者
全局:
请问楼主送HC了吗,同一天面的,完全没消息
回复

使用道具 举报

🔗
 楼主| panlong222 2016-3-4 22:24:10 | 只看该作者
全局:
ninacc 发表于 2016-3-4 13:30
请问楼主送HC了吗,同一天面的,完全没消息

我当晚就收到进hc的邮件了。
But, 你虽没有好消息,也没有坏消息啊! 这都过去一周了,我隐隐觉得你比我希望更大,应该是strongly recommended秒杀型的?
回复

使用道具 举报

🔗
william_gong 2016-3-4 22:50:31 | 只看该作者
全局:
问一下哈,最后一轮的follow up 不用 union find可不可以?
每次把1改0时候看看这个0上下左右有没有0,没有就直接return false?(第一个0额外处理下)
回复

使用道具 举报

🔗
 楼主| panlong222 2016-3-4 23:48:56 | 只看该作者
全局:
william_gong 发表于 2016-3-4 22:50
问一下哈,最后一轮的follow up 不用 union find可不可以?
每次把1改0时候看看这个0上下左右有没有0,没 ...

那如果有0呢
回复

使用道具 举报

🔗
william_gong 2016-3-5 00:02:33 | 只看该作者
全局:

有0就返回true吧?
回复

使用道具 举报

🔗
 楼主| panlong222 2016-3-5 00:06:12 | 只看该作者
全局:

你第一步左上角放个0, 第二步右下角放个0,第三步左上角0的旁边放个0, 然后你返回true了?
回复

使用道具 举报

🔗
william_gong 2016-3-5 02:29:33 | 只看该作者
全局:
panlong222 发表于 2016-3-5 00:06
你第一步左上角放个0, 第二步右下角放个0,第三步左上角0的旁边放个0, 然后你返回true了?

第二步那里不就已经false了?
回复

使用道具 举报

🔗
 楼主| panlong222 2016-3-5 02:53:47 | 只看该作者
全局:
william_gong 发表于 2016-3-5 02:29
第二步那里不就已经false了?

第一步true 第二步false 第三步false
而你的算法第三步是true, 懂了伐?
回复

使用道具 举报

🔗
ninacc 2016-3-5 05:46:46 | 只看该作者
全局:
panlong222 发表于 2016-3-4 09:24
我当晚就收到进hc的邮件了。
But, 你虽没有好消息,也没有坏消息啊! 这都过去一周了,我隐隐觉得你比我 ...

刚才忍不住问HR,说周一打电话,也不说送HC了没,觉得不妙了。。。觉得楼主面的好,good luck!
回复

使用道具 举报

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

本版积分规则

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