一亩三分地论坛

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

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

果然G家的phone interview让我给整跪了……

[复制链接] |试试Instant~ |关注本帖
woquuuu 发表于 2015-3-11 03:20:32 | 显示全部楼层 |阅读模式

2015(1-3月) 码农类 硕士 全职@Google - 网上海投 - 技术电面 |Other

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

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

x
Java serialize and deserialize的一道题,一个string list,变形成一个string之后,再变形回string list。我以为超简单,刷刷就写完了。
写完小哥说不对,因为string list里的input,可以包含任何character……
然后我就懵了,卡在不明白这样第二个函数该怎么拆string。. 鐣欏鐢宠璁哄潧-涓浜╀笁鍒嗗湴
经过漫长的沉默和提示,才终于解出来正确答案,这时时间就到了,小哥也没再多说,只问我还有啥问题没。我卡得心里都快哭出来了,但是嘴上还是问,有啥建议可以让我提高自己的不……
白人小哥是个实诚人啊,顿时一愣,结结巴巴的想了想,回,写代码,做项目,做实习,看CC150……
妈蛋,发个帖,滚回被窝里哭会~ 鏉ユ簮涓浜.涓夊垎鍦拌鍧.

评分

1

查看全部评分

yangbin009 发表于 2015-3-11 10:50:03 | 显示全部楼层
  1. public class SerializeList {
  2.         public static String serialize(List<String> strings) {-google 1point3acres
  3.                 StringBuilder sb = new StringBuilder();
  4.                 for (String s : strings) { 鏉ユ簮涓浜.涓夊垎鍦拌鍧.
  5.                         int len = s.length();
  6.                         sb.append(len).append("#").append(s);
  7.                 }
  8.                 return sb.toString();
  9.         }. Waral 鍗氬鏈夋洿澶氭枃绔,
  10. .1point3acres缃
  11.         public static List<String> deserialize(String s) {
  12.                 if (s == null || s.length() == 0)
  13.                         return null;

  14.                 List<String> result = new ArrayList<String>();
  15.                 int cur = 0;
  16.                 while (cur < s.length()) {
  17.                         int begin = cur;
  18.                         while (s.charAt(cur) != '#')
  19.                                 cur++;

  20.                         int num = Integer.valueOf(s.substring(begin, cur));. more info on 1point3acres.com
  21.                         StringBuilder sb = new StringBuilder();. 鍥磋鎴戜滑@1point 3 acres
  22.                         .鏈枃鍘熷垱鑷1point3acres璁哄潧
  23.                         cur++;
  24.                         while (num > 0) {
  25.                                 sb.append(s.charAt(cur++));
  26.                                 num--;. visit 1point3acres.com for more.
  27.                         }. from: 1point3acres.com/bbs
  28.                         result.add(sb.toString());
  29.                 }. 鍥磋鎴戜滑@1point 3 acres
  30.                 return result;. 鐣欏鐢宠璁哄潧-涓浜╀笁鍒嗗湴
  31.         }
  32. . Waral 鍗氬鏈夋洿澶氭枃绔,
  33.         public static void main(String[] args) {
  34.                 List<String> list = new ArrayList<String>();
  35.                 list.add("abc");
  36.                 list.add("ed fg");
  37.                 list.add(" hi#$%^-_");
  38.                 list.add("");
  39.                 list.add("^T&^G&VD$&*8cas");
  40. . visit 1point3acres.com for more.
  41.                 String s = serialize(list);
  42.                 List<String> result = deserialize(s);
  43.                 for (String ss : result)
  44.                         System.out.println(ss);
  45.         }
  46. }
复制代码
大家试一下看有什么corner case没考虑到,谢谢了! 就是“abc” -> "3#abc"

补充内容 (2015-3-11 10:57):
没考虑到null
回复 支持 1 反对 0

使用道具 举报

sonicgu 发表于 2015-3-11 03:52:19 | 显示全部楼层
就当时onsite挂了,再投就是了
回复 支持 反对

使用道具 举报

Asukawei 发表于 2015-3-11 04:04:53 | 显示全部楼层
用个数组保存下每个String的长度行不行呢
回复 支持 反对

使用道具 举报

nibuxing 发表于 2015-3-11 04:07:46 | 显示全部楼层
patpat,别灰心
这道题楼主现在觉得应该怎么做
回复 支持 反对

使用道具 举报

 楼主| woquuuu 发表于 2015-3-11 04:29:53 | 显示全部楼层
Asukawei 发表于 2015-3-11 04:04
用个数组保存下每个String的长度行不行呢

不可以有extra array or any other datastructure. 不可以有global变量,不可以加helper function……只一个list,一个string,两个函数互相play。
回复 支持 反对

使用道具 举报

 楼主| woquuuu 发表于 2015-3-11 06:25:13 | 显示全部楼层
最近超多due,筋疲力尽的趴了会儿,但是没睡着,脑子里还想着之前的题是怎么回事……
我现在觉得,面试官给我的这道题,或许,是根本无解的!

再重申一下原题:
写两个method,第一个:-google 1point3acres
给一个List<String>,把里面的内容全部转换成一个String。
第二个:
input是转换后的String,把这个String拆回原来的List。

面试官认为的正确解法是在list里的每一个string之前加上它的length。
我当时以为这样解是可以的,但是现在想想又不对。. 鍥磋鎴戜滑@1point 3 acres

假设list里面有个string:“12345Apple”,
这个string的长度是10,-google 1point3acres
那么,把list里所有string加到一块之后,变成了:“1012345Apple……”
这样子,一旦长度大于10,你仍然无法确认头几个数字是length,第几个数字之后是属于原string的。
考虑到string可以包含数字、字母、特殊符号、句号逗号等等……
面试官给的hint显然是错的,那这道题真的有solution吗?


.鐣欏璁哄潧-涓浜-涓夊垎鍦
补充内容 (2015-3-11 06:26):
跪求地里同志们解答!!TAT
回复 支持 反对

使用道具 举报

cow12331 发表于 2015-3-11 07:03:37 | 显示全部楼层
woquuuu 发表于 2015-3-11 06:25
最近超多due,筋疲力尽的趴了会儿,但是没睡着,脑子里还想着之前的题是怎么回事……
我现在觉得,面试官 ...

我觉得是在每个list的string的头假如长度和一个符号比如[ab,123] -》 [2@ab,3@123] -》2@ab3@123,然后decode先读第一个@前的长度然后在@后读取长度
回复 支持 反对

使用道具 举报

 楼主| woquuuu 发表于 2015-3-11 07:09:13 | 显示全部楼层
cow12331 发表于 2015-3-11 07:03
我觉得是在每个list的string的头假如长度和一个符号比如[ab,123] -》 [2@ab,3@123] -》2@ab3@123,然后de ...

可是string也可以包括特殊符号的。就是说,string本身也可以有@在里面。我整个面试过程里,卡就卡在我想像你这样找个delimiter,但是无果啊。
回复 支持 反对

使用道具 举报

elfandi 发表于 2015-3-11 07:11:33 | 显示全部楼层
多少个str+空格+(str长度+空格)s+贴在一起的
回复 支持 反对

使用道具 举报

cow12331 发表于 2015-3-11 07:22:01 | 显示全部楼层
woquuuu 发表于 2015-3-11 07:09
可是string也可以包括特殊符号的。就是说,string本身也可以有@在里面。我整个面试过程里,卡就卡在我想 ...

不影响 比如【@】 编程 【1@@】一样可以解析
回复 支持 反对

使用道具 举报

 楼主| woquuuu 发表于 2015-3-11 07:49:00 | 显示全部楼层
cow12331 发表于 2015-3-11 07:22
不影响 比如【@】 编程 【1@@】一样可以解析

没明白你的意思。

假如,input list里有如下string: [“12@12@”, "12@12@"]
按你讲的,加入 长度@ 在每个字符串前=>
最终字符串是这样了:"6@12@12@6@12@12@"
我怎么觉得没法拆分回去呢……
回复 支持 反对

使用道具 举报

cow12331 发表于 2015-3-11 07:54:33 | 显示全部楼层
woquuuu 发表于 2015-3-11 07:49
没明白你的意思。

假如,input list里有如下string: [“12@12@”, "12@12@"]

6@12@12@6@12@12@
-google 1point3acres
从左到右发现第一个@后拿到之前的数字,然后读取之后的N位. visit 1point3acres.com for more.
第一次发现@后得到6,然后读取@后的6位12@12@ 然后重复这个步骤
回复 支持 反对

使用道具 举报

timtam85 发表于 2015-3-11 12:50:07 | 显示全部楼层
cow12331 发表于 2015-3-11 07:54. more info on 1point3acres.com
6@12@12@6@12@12@

从左到右发现第一个@后拿到之前的数字,然后读取之后的N位

这个解法是可行的,因为先读取了数字,就知道后面是一个多长的字符串,就算后面再出现与dilimiter一样的字符也知道这个不是delimiter,而是字符串的一部分。
回复 支持 反对

使用道具 举报

chuendes 发表于 2015-3-11 14:29:45 | 显示全部楼层
# 在list里的每一个string之前加上 它的length + '#'。 鏉ユ簮涓浜.涓夊垎鍦拌鍧.
def se(s):
    res = ''
    for ele in s:
        size = len(ele)
        res += str(size) + '#' + ele
    return res

def des(s):
    res = []
    i, j = 0, 0
    while i < len(s):. From 1point 3acres bbs
        while s[j] != '#':
            j+=1
        size = int(s[i:j])
        res.append(s[j+1: j+1+size])
        i = j+1+size
        j = i
    return res
回复 支持 反对

使用道具 举报

本版积分规则

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

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

关闭

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

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

custom counter

GMT+8, 2016-12-11 05:05

Powered by Discuz! X3

© 2001-2013 Comsenz Inc. Design By HUXTeam

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