由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
JobHunting版 - 发个Twitter的面试题
相关主题
Interview exposed上的code写的也不怎么样呀?问个Zenefits电面题目,他家好难。。。
text justification 有人ac吗Google 电面
隔壁讨论FB变态面试官,请教一下leetcode 301题怎么解最优?问一道uber onsite题目
收到G家拒信,发面经java没有指针真麻烦
50行code能解决addbinary 问题么分享Imo电面题
谁能给贴个大数相减的java code 吗?Palindrome那题,OJ上通不过
Reverse Words in a StringPalindrome那题,OJ上通不过
星期一福利:某公司店面题Memory Limit Exceeded 错误
相关话题的讨论汇总
话题: char话题: slash2话题: slashstar话题: lastc
进入JobHunting版参与讨论
1 (共1页)
w****x
发帖数: 2483
1
去注释
abc//xyz\nwwe*/*sdfsd/*sdfda*/sd*/cvcd => abc\nwwe*sd*/cvcd
p*****2
发帖数: 21240
2

先用\n split成几个string
检查每个string
碰到//的话后边的都干掉
碰到/*的话用个counter,找到搭配的*/
//和/*是要看先碰到谁,以谁为准吧

【在 w****x 的大作中提到】
: 去注释
: abc//xyz\nwwe*/*sdfsd/*sdfda*/sd*/cvcd => abc\nwwe*sd*/cvcd

w****x
发帖数: 2483
3

加两个限制, 不能用split, 并且是one pass read

【在 p*****2 的大作中提到】
:
: 先用\n split成几个string
: 检查每个string
: 碰到//的话后边的都干掉
: 碰到/*的话用个counter,找到搭配的*/
: //和/*是要看先碰到谁,以谁为准吧

a********x
发帖数: 1502
4
有限状态自动机

【在 w****x 的大作中提到】
:
: 加两个限制, 不能用split, 并且是one pass read

w****x
发帖数: 2483
5

有点高射炮轰蚊子, 时间很紧的, 把那个状态图画出来时间都过了

【在 a********x 的大作中提到】
: 有限状态自动机
a********x
发帖数: 1502
6
不然我绝对想不出别的one pass了

【在 w****x 的大作中提到】
:
: 有点高射炮轰蚊子, 时间很紧的, 把那个状态图画出来时间都过了

R********y
发帖数: 88
7
pair up, // 和 \n 一组
/* 和 */ 一组
用string.indexOf method,如果先出现//,从此处开始找\n,中间跳过。
如果先出现/*,从此处开始找*/,中间跳过。
跳过后继续找,直到字串结束

【在 w****x 的大作中提到】
: 去注释
: abc//xyz\nwwe*/*sdfsd/*sdfda*/sd*/cvcd => abc\nwwe*sd*/cvcd

w****x
发帖数: 2483
8

光有/*没有*/的话"/*"要保留

【在 R********y 的大作中提到】
: pair up, // 和 \n 一组
: /* 和 */ 一组
: 用string.indexOf method,如果先出现//,从此处开始找\n,中间跳过。
: 如果先出现/*,从此处开始找*/,中间跳过。
: 跳过后继续找,直到字串结束

p*****2
发帖数: 21240
9

感觉这样就差不多了。

【在 R********y 的大作中提到】
: pair up, // 和 \n 一组
: /* 和 */ 一组
: 用string.indexOf method,如果先出现//,从此处开始找\n,中间跳过。
: 如果先出现/*,从此处开始找*/,中间跳过。
: 跳过后继续找,直到字串结束

b*******y
发帖数: 2048
10
新一代面霸阿。。。面试真多
twitter简历看都没看就把偶据了:(

【在 w****x 的大作中提到】
: 去注释
: abc//xyz\nwwe*/*sdfsd/*sdfda*/sd*/cvcd => abc\nwwe*sd*/cvcd

相关主题
谁能给贴个大数相减的java code 吗?问个Zenefits电面题目,他家好难。。。
Reverse Words in a StringGoogle 电面
星期一福利:某公司店面题问一道uber onsite题目
进入JobHunting版参与讨论
l*****a
发帖数: 14598
11
正常
那地方不怎么招fresh吧

【在 b*******y 的大作中提到】
: 新一代面霸阿。。。面试真多
: twitter简历看都没看就把偶据了:(

w****x
发帖数: 2483
12

别罗嗦了, 上代码吧

【在 p*****2 的大作中提到】
:
: 感觉这样就差不多了。

R********y
发帖数: 88
13
先出现/*的话,从当前位置找*/,如果返回-1(没找到),从当前位置开始只找//和/n
的pair

【在 w****x 的大作中提到】
:
: 别罗嗦了, 上代码吧

w****x
发帖数: 2483
14

就是问个题而已......
twitter我还没投简历就收到据信了

【在 b*******y 的大作中提到】
: 新一代面霸阿。。。面试真多
: twitter简历看都没看就把偶据了:(

l*****a
发帖数: 14598
15
没申请为什么悲剧?

【在 w****x 的大作中提到】
:
: 就是问个题而已......
: twitter我还没投简历就收到据信了

p*****2
发帖数: 21240
16

我准备写写这个。假设输入是合法的。

【在 w****x 的大作中提到】
:
: 就是问个题而已......
: twitter我还没投简历就收到据信了

w****x
发帖数: 2483
17

/n
如果没找到那不是又要从第一次/*的位置开始write? 就不是one pass了

【在 R********y 的大作中提到】
: 先出现/*的话,从当前位置找*/,如果返回-1(没找到),从当前位置开始只找//和/n
: 的pair

w****x
发帖数: 2483
18

知道我会申请, 抢在申请前先把据信发了省的以后麻烦....

【在 l*****a 的大作中提到】
: 没申请为什么悲剧?
p*****2
发帖数: 21240
19

我觉得应该假设是合法的输入吧?
/* 必能找到 */
//必能找到/n或者字符串结束
这个assumption正确吗?

【在 w****x 的大作中提到】
:
: 知道我会申请, 抢在申请前先把据信发了省的以后麻烦....

w****x
发帖数: 2483
20

为什么/*abcddfa 不合法呢??
这个情况需要考虑进去, 编译器作预处理的时候不能假定用户输入的都是合法程序啊

【在 p*****2 的大作中提到】
:
: 我觉得应该假设是合法的输入吧?
: /* 必能找到 */
: //必能找到/n或者字符串结束
: 这个assumption正确吗?

相关主题
java没有指针真麻烦Palindrome那题,OJ上通不过
分享Imo电面题Memory Limit Exceeded 错误
Palindrome那题,OJ上通不过排列组合害死人啊
进入JobHunting版参与讨论
l*****a
发帖数: 14598
21
不能这么假设
否则所有题目的异常判断都可以省略了

【在 p*****2 的大作中提到】
:
: 我觉得应该假设是合法的输入吧?
: /* 必能找到 */
: //必能找到/n或者字符串结束
: 这个assumption正确吗?

p*****2
发帖数: 21240
22

/*abcddfa
这个东西代表什么呢?没有注释?

【在 w****x 的大作中提到】
:
: 为什么/*abcddfa 不合法呢??
: 这个情况需要考虑进去, 编译器作预处理的时候不能假定用户输入的都是合法程序啊

w****x
发帖数: 2483
23

我晕, 不管它代表什么, 输入是/*asd 输出还是/*asd

【在 p*****2 的大作中提到】
:
: /*abcddfa
: 这个东西代表什么呢?没有注释?

p*****2
发帖数: 21240
24

这个不一定吧?要问面试官了。

【在 l*****a 的大作中提到】
: 不能这么假设
: 否则所有题目的异常判断都可以省略了

w****x
发帖数: 2483
25
/*asd => /*asd
/*asd//safasd*/ => /*asd
/*asdas/*asd*/sd => sd
//asdasd => 空
//asdas/n => /n
p*****2
发帖数: 21240
26

那不就是相当于没有注释吗?

【在 w****x 的大作中提到】
: /*asd => /*asd
: /*asd//safasd*/ => /*asd
: /*asdas/*asd*/sd => sd
: //asdasd => 空
: //asdas/n => /n

p*****2
发帖数: 21240
27

/*asd//safasd*/ => /*asd
感觉这个应该输出空

【在 w****x 的大作中提到】
: /*asd => /*asd
: /*asd//safasd*/ => /*asd
: /*asdas/*asd*/sd => sd
: //asdasd => 空
: //asdas/n => /n

l*****a
发帖数: 14598
28
放IDE里面就全知道了

【在 p*****2 的大作中提到】
:
: /*asd//safasd*/ => /*asd
: 感觉这个应该输出空

w****x
发帖数: 2483
29

对,就相当于每注释, 我晕, 管它有没有注释, 就相当于实现一个编译器去注释的预处
理程序, 有那么绕吗....

【在 p*****2 的大作中提到】
:
: /*asd//safasd*/ => /*asd
: 感觉这个应该输出空

p*****2
发帖数: 21240
30

好像是空的呀。

【在 l*****a 的大作中提到】
: 放IDE里面就全知道了
相关主题
问个string combination的问题text justification 有人ac吗
Interleave Strings那个题目有O(n)时间 O(1)空间算法么?隔壁讨论FB变态面试官,请教一下leetcode 301题怎么解最优?
Interview exposed上的code写的也不怎么样呀?收到G家拒信,发面经
进入JobHunting版参与讨论
p*****2
发帖数: 21240
31

感觉不是这样。如果你在IDE里搞一个/*abc, IDE是期望后边有一个*/的。
不明白为什么要认为/*abc是合法的。

【在 w****x 的大作中提到】
:
: 对,就相当于每注释, 我晕, 管它有没有注释, 就相当于实现一个编译器去注释的预处
: 理程序, 有那么绕吗....

w****x
发帖数: 2483
32

随便哪种情况了, 写起来是蛮麻烦的

【在 p*****2 的大作中提到】
:
: 感觉不是这样。如果你在IDE里搞一个/*abc, IDE是期望后边有一个*/的。
: 不明白为什么要认为/*abc是合法的。

p*****2
发帖数: 21240
33

看你加入的限定条件是不是为真了。面试的时候可能没有那么多限定条件。

【在 w****x 的大作中提到】
:
: 随便哪种情况了, 写起来是蛮麻烦的

w****x
发帖数: 2483
34

我晕, 不合法IDE也得处理啊, 不能崩溃吧....
比如你写一个
void main()
{}
/*asdfds
IDE会报错, 改成
void main()
{}
/*asdfds*/
就编译通过

【在 p*****2 的大作中提到】
:
: 看你加入的限定条件是不是为真了。面试的时候可能没有那么多限定条件。

p*****2
发帖数: 21240
35

可是IDE并没有要输出去掉comment的程序呀
这里有两步
1. IDE提示语法错误 (保证了语法的正确性)
2. 编译器编译,去掉comments
这题是第二步,也就是说语法应该没问题。如果没有IDE,也是应该先进行语法的检查
才编译吧?你这些输入语法检查就报错了。

【在 w****x 的大作中提到】
:
: 我晕, 不合法IDE也得处理啊, 不能崩溃吧....
: 比如你写一个
: void main()
: {}
: /*asdfds
: IDE会报错, 改成
: void main()
: {}
: /*asdfds*/

w****x
发帖数: 2483
36

编译器因该先进行预处理在座语法检查吧, 先把注释去掉, 宏做替换等预处理, 预处理
完了在检查语法
和IDE没关系, 假设在用txt文本写程序, 用g++编译

【在 p*****2 的大作中提到】
:
: 可是IDE并没有要输出去掉comment的程序呀
: 这里有两步
: 1. IDE提示语法错误 (保证了语法的正确性)
: 2. 编译器编译,去掉comments
: 这题是第二步,也就是说语法应该没问题。如果没有IDE,也是应该先进行语法的检查
: 才编译吧?你这些输入语法检查就报错了。

p*****2
发帖数: 21240
37

那你搞一个/*, 编译器怎么搞?

【在 w****x 的大作中提到】
:
: 编译器因该先进行预处理在座语法检查吧, 先把注释去掉, 宏做替换等预处理, 预处理
: 完了在检查语法
: 和IDE没关系, 假设在用txt文本写程序, 用g++编译

w****x
发帖数: 2483
38

/*abc 那就不是注释了啊, 所以/*abc就被保留下来了, 然后编译的时候就被编译器报
错了

【在 p*****2 的大作中提到】
:
: 那你搞一个/*, 编译器怎么搞?

p*****2
发帖数: 21240
39

我怎么感觉先会有个语法检查呢? 不是这样吗?

【在 w****x 的大作中提到】
:
: /*abc 那就不是注释了啊, 所以/*abc就被保留下来了, 然后编译的时候就被编译器报
: 错了

p*****2
发帖数: 21240
40

没看你程序,感觉你不是扫一遍吧?
相关主题
收到G家拒信,发面经Reverse Words in a String
50行code能解决addbinary 问题么星期一福利:某公司店面题
谁能给贴个大数相减的java code 吗?问个Zenefits电面题目,他家好难。。。
进入JobHunting版参与讨论
w****x
发帖数: 2483
41

先预处理再编译吧, 这题就算是预处理的范畴, 怎么扯到编译上去了

【在 p*****2 的大作中提到】
:
: 没看你程序,感觉你不是扫一遍吧?

p*****2
发帖数: 21240
42

可能我理解错了。我以为先进行语法检查,再remove comments
你的意思是先remove comments再进行语法检查
难道remove comments这步没有现成的代码吗?还有为什么要求只扫一遍呢?

【在 w****x 的大作中提到】
:
: 先预处理再编译吧, 这题就算是预处理的范畴, 怎么扯到编译上去了

w****x
发帖数: 2483
43

这题...就是要求去除comment这么简单, 你搞那么复杂做什么...

【在 p*****2 的大作中提到】
:
: 可能我理解错了。我以为先进行语法检查,再remove comments
: 你的意思是先remove comments再进行语法检查
: 难道remove comments这步没有现成的代码吗?还有为什么要求只扫一遍呢?

g****y
发帖数: 240
44
我来贡献一个python re
re.sub(r"(//.*(?=\\n))|(/\*.*?\*/)", "", r"abc//xyz\nwwe*/*sdfsd/*sdfda*/sd*
/cvcd")
i*******e
发帖数: 240
45
string s = "abc//xyz\nwwe*/*sdfsd/*sdfda*/sd*/cvcd";
int i;
bool isInStarComment = false;
bool isInLineComment = false;
string ans = "";

for (i=0; i {
if (!isInStarComment && !isInLineComment)
{
if (i+1 {
if (s[i+1] == '/') {isInLineComment = true; i++; continue;}
else if (s[i+1] == '*') {isInStarComment = true; i++;
continue;}
}

ans += s[i];
}

if (isInLineComment)
{
if (s[i]=='\n')
{
isInLineComment = false;
continue;
}
}

if (isInStarComment)
{
if (i+1 {
isInStarComment = false;
i++;
continue;
}
}
}
n****r
发帖数: 120
46
奔一个:
public static String removeComments(String a) {
StringBuilder sb = new StringBuilder();
int i = 0, j = 0;
while (i < a.length()) {
if (a.charAt(i) == '/' && i + 1 < a.length() && (a.charAt(i + 1) ==
'/' || a.charAt(i + 1) == '*')) {
j = i + 2;

boolean pairMatched = false;

boolean lineComment = true;
char[] pair = {'\n'};
if (a.charAt(i+1) == '*'){
lineComment = false;
pair = "*/".toCharArray();
}
while (j < a.length()){
if ((lineComment && a.charAt(j) == pair[0]) || (!lineComment
&& a.charAt(j) == pair[0] && j+1 < a.length() && a.charAt(j+1) == pair[1])){
i = j;
if (!lineComment)
i = j+2;
pairMatched = true;
break;
}
j++;
}
if (!pairMatched){
if (a.charAt(i+1) == '*')
sb.append(a, i, j);
i = j;
}
} else {
sb.append(a.charAt(i));
i++;
}
}
return sb.toString();
}
b*2
发帖数: 94
47
这不是我去年面MSFT的题么T_T...这题磨了我好一阵儿。。。
p*****2
发帖数: 21240
48

当时什么requirement?

【在 b*2 的大作中提到】
: 这不是我去年面MSFT的题么T_T...这题磨了我好一阵儿。。。
b*2
发帖数: 94
49

印象里当时的要求是: remove all the comments from a VAID java file 瓦利德 瓦
利德 瓦利德!
/*asd => /*asd <======因为valid, 所以但凡有/*,就肯定可以期待*/的出现,不过
可能在很多行之后。
/*asd//safasd*/ => 全部remove
/*asdas/*asd*/sd => sd
//asdasd => 空
//asdas/n => /n
有种情况是 如果注释是发生在String里,就不能remove它: "String /*String*/" =>
"String /*String*/"

【在 p*****2 的大作中提到】
:
: 当时什么requirement?

b*2
发帖数: 94
50
忘了说了:Assuming this file is VALID 瓦利德。
相关主题
Google 电面分享Imo电面题
问一道uber onsite题目Palindrome那题,OJ上通不过
java没有指针真麻烦Palindrome那题,OJ上通不过
进入JobHunting版参与讨论
p*****2
发帖数: 21240
51

=>
不错,很详细,跟我想的差不多。多了一种情况很有意思。

【在 b*2 的大作中提到】
: 忘了说了:Assuming this file is VALID 瓦利德。
p*****2
发帖数: 21240
52

对。我认为可以有这个assumption。这就是我跟LZ纠结的地方。

【在 b*2 的大作中提到】
: 忘了说了:Assuming this file is VALID 瓦利德。
d**e
发帖数: 6098
53
其实用state machine都是辅助思考,这题跟我在hulu面试那题相似度非常大。

【在 w****x 的大作中提到】
:
: 这题...就是要求去除comment这么简单, 你搞那么复杂做什么...

l*********8
发帖数: 4642
54
我使用g++ 4.3.4 编译如下错误程序:
/*
int main()
{
intt a;
a = 3;
}
直接得到一条error: unterminated comment
并没有报intt 未定义和 a未定义的错误。
所以,去除comment时遇到未配对的 /*, 直接返回错误也可以,不需要试图将 /* 保留
在去除comment后的结果中。 当然,如果面试官非要这么做,我们也只有做。

【在 w****x 的大作中提到】
:
: 这题...就是要求去除comment这么简单, 你搞那么复杂做什么...

p*****2
发帖数: 21240
55

我觉得也是。bq2也证实了。

【在 l*********8 的大作中提到】
: 我使用g++ 4.3.4 编译如下错误程序:
: /*
: int main()
: {
: intt a;
: a = 3;
: }
: 直接得到一条error: unterminated comment
: 并没有报intt 未定义和 a未定义的错误。
: 所以,去除comment时遇到未配对的 /*, 直接返回错误也可以,不需要试图将 /* 保留

l*********8
发帖数: 4642
56
弱问啥是bq2

【在 p*****2 的大作中提到】
:
: 我觉得也是。bq2也证实了。

b*2
发帖数: 94
57
=.=||| bq2是小女子。。。。。。面试时也碰到过此题。

【在 l*********8 的大作中提到】
: 弱问啥是bq2
d**e
发帖数: 6098
58
你和水木的dp2是什么关系?

【在 b*2 的大作中提到】
: =.=||| bq2是小女子。。。。。。面试时也碰到过此题。
D**f
发帖数: 439
59
很简单的状态机,table driven,最多20分钟能搞定。
w****x
发帖数: 2483
60

写一个吧, 对这块不是很熟悉

【在 D**f 的大作中提到】
: 很简单的状态机,table driven,最多20分钟能搞定。
相关主题
Memory Limit Exceeded 错误Interleave Strings那个题目有O(n)时间 O(1)空间算法么?
排列组合害死人啊Interview exposed上的code写的也不怎么样呀?
问个string combination的问题text justification 有人ac吗
进入JobHunting版参与讨论
l*********8
发帖数: 4642
61
呵呵, 我还以为bq2是一个没听说过的编译器呢。 看帖不仔细啊。。。

【在 b*2 的大作中提到】
: =.=||| bq2是小女子。。。。。。面试时也碰到过此题。
l*********8
发帖数: 4642
62
我写一个 (还没有考虑“”的问题,好像挺复杂)
bool removeComment(char * s)
{
char *r = s, *w = s;
while (r && *r){
if ( !strncmp(r, "/*", 2) ) {
r = strstr(r+2, "*/");
r = (r!=NULL) ? r+2 : r;
} else if ( !strncmp(r, "//", 2) ) {
r = strchr(r+2, '\n');
r = (r!=NULL) ? r : s+strlen(s);
} else {
*w++ = *r++;
}
}
if (w != NULL)
*w = '\0';
return r!=NULL;
}
h*******e
发帖数: 1377
63
2哥的算法可以手动split 就是 i == strLen || isreturn(str[i]) isreturn(str[i-
1]) 不同时候 check 一下 substr(str, segStart, i - segStart ) 把 相应的字符串
拿出来检查
同一行如果先遇到了 // /* 记录下 startPos。 和startType // 期待第一个 /n /*
期待第一个 */ 字符串 内移动 在字符串内保留一个 movPos
每次 遇到 // 前 /n 后 和 / * */不移动 movPos 不移动,否则str[movPos++] =
当前的值 就是one pass的, by the way twitter 离我们公司不远:)那个地方在
twitter 搬过去之后有了很多 穿戴整齐的人,不像以前San Francisco tenderloin街
区到处都是homeless到处游荡了。

【在 w****x 的大作中提到】
:
: 写一个吧, 对这块不是很熟悉

z******e
发帖数: 82
64
// " /*dfsfsdf*/ //fdsfs " is processed.
private static String uncomment(String str) {
boolean slash2 = false;
boolean inStr = false;
boolean slashstar = false;
StringBuilder sb = new StringBuilder();
char lastc = ' ';
char c = ' ';
int deleteStart = -1;
for (int i = 0; i < str.length(); i++) {
lastc = c;
c = str.charAt(i);
sb.append(c);
// ""
if (c == '"') {
inStr = !inStr;
continue;
}
if (!inStr && c == '\n' && slash2) {
slash2 = false;
sb.delete(deleteStart, sb.length() - 1);
deleteStart = -1;
continue;
}
if (!inStr && c == '/') {
// //
if (lastc == '/' && !slash2 && !slashstar) {
deleteStart = sb.length() - 2;
slash2 = true;
continue;
}
// */
if (lastc == '*' && slashstar) {
slashstar = false;
sb.delete(deleteStart, sb.length());
deleteStart = -1;
continue;
}
}
// /*
if (!inStr && c == '*') {
if (lastc == '/' && !slashstar && !slash2) {
deleteStart = sb.length() - 2;
slashstar = true;
continue;
}
}
}
if (slash2 && deleteStart >= 0) {
sb.delete(deleteStart, sb.length());
}
return sb.toString();
}
test
-----------------------------------
abc//xyz\nwwe*/*sdfsdsdfda*/s"/*fdfsf*/df//sfs"dcvcd
abc\nwwe*s"/*fdfsf*/df//sfs"dcvcd
/*asd
/*asd
/*asd//safasd*/
/*asdas/*asd*/sd
sd
//asdasd
//asdas\n
\n
//as/*fdsf*/das\n
\n
/*as//das*/\n
\n
l*********8
发帖数: 4642
65
这里对“的检测是不够的。

【在 z******e 的大作中提到】
: // " /*dfsfsdf*/ //fdsfs " is processed.
: private static String uncomment(String str) {
: boolean slash2 = false;
: boolean inStr = false;
: boolean slashstar = false;
: StringBuilder sb = new StringBuilder();
: char lastc = ' ';
: char c = ' ';
: int deleteStart = -1;
: for (int i = 0; i < str.length(); i++) {

z******e
发帖数: 82
66
can you please give a test case?

【在 l*********8 的大作中提到】
: 这里对“的检测是不够的。
l*********8
发帖数: 4642
67
char c = '"'; /*this is the test for " */

【在 z******e 的大作中提到】
: can you please give a test case?
z******e
发帖数: 82
68
多谢大牛的test case
private static String uncomment(String str) {
boolean slash2 = false;
boolean inStr = false;
boolean slashstar = false;
StringBuilder sb = new StringBuilder();
char lastc = ' ';
char c = ' ';
int deleteStart = -1;
for (int i = 0; i < str.length(); i++) {
lastc = c;
c = str.charAt(i);
sb.append(c);
// ""
if (c == '"' && !slash2 && !slashstar) {
if (lastc != '\''
|| (i < str.length() - 1 && str.charAt(i + 1) != '\'
')) {
inStr = !inStr;
continue;
}
}
// // xxxxx \n
if (c == '\n' && slash2) {
slash2 = false;
sb.delete(deleteStart, sb.length() - 1);
deleteStart = -1;
continue;
}
if (!inStr && c == '/') {
// //
if (lastc == '/' && !slash2 && !slashstar) {
deleteStart = sb.length() - 2;
slash2 = true;
continue;
}
// */
if (lastc == '*' && slashstar) {
slashstar = false;
sb.delete(deleteStart, sb.length());
deleteStart = -1;
continue;
}
}
// /*
if (!inStr && c == '*') {
if (lastc == '/' && !slashstar && !slash2) {
deleteStart = sb.length() - 2;
slashstar = true;
continue;
}
}
}
if (slash2 && deleteStart >= 0) {
sb.delete(deleteStart, sb.length());
}
return sb.toString();
}
// test cases:
---------------------------
abc//xyz\nwwe*/*sdfsdsdfda*/s"/*fdfsf*/df//sfs"dcvcd
abc\nwwe*s"/*fdfsf*/df//sfs"dcvcd
/*asd
/*asd
/*asd//s"afasd*/
/*asdas/*asd*/sd
sd
//asdasd
//asdas\n
\n
//as/*fdsf*/das\n
\n
/*as//das*/\n
\n
char c = '"'; /*this is the test for " */
char c = '"';
char c = '"
char c = '"
char c = "'; /*this is the test for " */
char c = "'; /*this is the test for " */
char c = '"'
char c = '"'
l*********8
发帖数: 4642
69
Can you try this one?
char str = "// and \"."; // Test for // and " in a string

【在 z******e 的大作中提到】
: 多谢大牛的test case
: private static String uncomment(String str) {
: boolean slash2 = false;
: boolean inStr = false;
: boolean slashstar = false;
: StringBuilder sb = new StringBuilder();
: char lastc = ' ';
: char c = ' ';
: int deleteStart = -1;
: for (int i = 0; i < str.length(); i++) {

z******e
发帖数: 82
70
-_-!!, what bad test skill I have.
for this test case, change
if (c == '"' && !slash2 && !slashstar) {
to
if (c == '"' && lastc != '\' && !slash2 && !slashstar) {
complete code:
private static String uncomment(String str) {
boolean slash2 = false;
boolean inStr = false;
boolean slashstar = false;
StringBuilder sb = new StringBuilder();
char lastc = ' ';
char c = ' ';
int deleteStart = -1;
for (int i = 0; i < str.length(); i++) {
lastc = c;
c = str.charAt(i);
sb.append(c);
// ""
if (c == '"' && lastc != '\' && !slash2 && !slashstar) {
if (lastc != '''
|| (i < str.length() - 1 && str.charAt(i + 1) != '''
)) {
inStr = !inStr;
continue;
}
}
// // xxxxx \n
if (c == '\n' && slash2) {
slash2 = false;
sb.delete(deleteStart, sb.length() - 1);
deleteStart = -1;
continue;
}
if (!inStr && c == '/') {
// //
if (lastc == '/' && !slash2 && !slashstar) {
deleteStart = sb.length() - 2;
slash2 = true;
continue;
}
// */
if (lastc == '*' && slashstar) {
slashstar = false;
sb.delete(deleteStart, sb.length());
deleteStart = -1;
continue;
}
}
// /*
if (!inStr && c == '*') {
if (lastc == '/' && !slashstar && !slash2) {
deleteStart = sb.length() - 2;
slashstar = true;
continue;
}
}
}
if (slash2 && deleteStart >= 0) {
sb.delete(deleteStart, sb.length());
}
return sb.toString();
}
test cases:
abc//xyz\nwwe*/*sdfsdsdfda*/s"/*fdfsf*/df//sfs"dcvcd
abc\nwwe*s"/*fdfsf*/df//sfs"dcvcd
/*asd
/*asd
/*asd//s"afasd*/
/*asdas/*asd*/sd
sd
//asdasd
//asdas\n
\n
//as/*fdsf*/das\n
\n
/*as//das*/\n
\n
char c = '"'; /*this is the test for " */
char c = '"';
char c = '"
char c = '"
char c = "'; /*this is the test for " */
char c = "'; /*this is the test for " */
char c = '"'
char c = '"'
char str = "// and "."; // Test for // and " in a string
char str = "// and ".";

【在 l*********8 的大作中提到】
: Can you try this one?
: char str = "// and \"."; // Test for // and " in a string

相关主题
text justification 有人ac吗50行code能解决addbinary 问题么
隔壁讨论FB变态面试官,请教一下leetcode 301题怎么解最优?谁能给贴个大数相减的java code 吗?
收到G家拒信,发面经Reverse Words in a String
进入JobHunting版参与讨论
l*********8
发帖数: 4642
71
Well, can you try this one:
char str[] = "\\"; // test \ inside "

【在 z******e 的大作中提到】
: -_-!!, what bad test skill I have.
: for this test case, change
: if (c == '"' && !slash2 && !slashstar) {
: to
: if (c == '"' && lastc != '\' && !slash2 && !slashstar) {
: complete code:
: private static String uncomment(String str) {
: boolean slash2 = false;
: boolean inStr = false;
: boolean slashstar = false;

z******e
发帖数: 82
72
new test cases:
--------------------
char str[] = "\\"; // test \ inside "
char str[] = "\\";
char str[] = '\"'; // test \ inside "
char str[] = '\"';
code:
---------------------------
private static String uncomment(String str) {
boolean slash2 = false;
boolean inStr = false;
boolean slashstar = false;
boolean escape = false;
StringBuilder sb = new StringBuilder();
char lastc = ' ';
char c = ' ';
int deleteStart = -1;
for (int i = 0; i < str.length(); i++) {
lastc = c;
c = str.charAt(i);
sb.append(c);
// "
if (c == '"' && !escape && !slash2 && !slashstar) {
// '"'
if (lastc != '''
|| (i < str.length() - 1 && str.charAt(i + 1) != '''
)) {
inStr = !inStr;
continue;
}
}
// // xxxxx \n
if (c == '\n' && slash2) {
slash2 = false;
sb.delete(deleteStart, sb.length() - 1);
deleteStart = -1;
continue;
}
if (!inStr && c == '/') {
// //
if (lastc == '/' && !slash2 && !slashstar) {
deleteStart = sb.length() - 2;
slash2 = true;
continue;
}
// */
if (lastc == '*' && slashstar) {
slashstar = false;
sb.delete(deleteStart, sb.length());
deleteStart = -1;
continue;
}
}
// /*
if (!inStr && c == '*') {
if (lastc == '/' && !slashstar && !slash2) {
deleteStart = sb.length() - 2;
slashstar = true;
continue;
}
}
if ((inStr || lastc == ''') && c == '\') {
escape = lastc != '\';
} else {
escape = false;
}
}
if (slash2 && deleteStart >= 0) {
sb.delete(deleteStart, sb.length());
}
return sb.toString();
}

【在 l*********8 的大作中提到】
: Well, can you try this one:
: char str[] = "\\"; // test \ inside "

e****e
发帖数: 418
73
My code.
public static String removeComments( String s ) {
for ( int i = 0; i < s.length() - 1; i++ ) {
if ( s.charAt( i ) == '"' ) { // Find "
for ( int j = i + 1; j < s.length(); j++ ) {
if ( s.charAt( j ) == '"' ) { // Find "
i = j + 1;
break;
}
}
}
if ( i < s.length() - 1 && s.charAt( i ) == '/' && s.charAt( i +
1) == '/' ) { // Find //
for ( int j = i + 2; j < s.length(); j++ ) {
if ( s.charAt( j ) == '\n' ) { // Find \n
s = s.substring( 0, i ) + s.substring( j );
i = i + 1;
break;
} else if ( j == s.length() - 1 ) {
i = s.length() - 1;
s = "";
}
}
}

if ( i < s.length() - 1 && s.charAt( i ) == '/' && s.charAt( i +
1 ) == '*' ) { // Find /*
for ( int j = i + 2; j < s.length() - 1; j++ ) {
if ( s.charAt( j ) == '*' && s.charAt( j + 1 ) == '/' )
{ // Find */
if ( j == s.length() - 2 )
s = s.substring( 0, i );
else
s = s.substring( 0, i ) + s.substring( j + 2 );
break;
}
}
}
}

return s;
}
l*********8
发帖数: 4642
74
大致看了一下
你的程序跑过这个测试吗?
input:
char str = "// and \".";// Test for // and " in a string
output:
char str = "// and \".";

【在 e****e 的大作中提到】
: My code.
: public static String removeComments( String s ) {
: for ( int i = 0; i < s.length() - 1; i++ ) {
: if ( s.charAt( i ) == '"' ) { // Find "
: for ( int j = i + 1; j < s.length(); j++ ) {
: if ( s.charAt( j ) == '"' ) { // Find "
: i = j + 1;
: break;
: }
: }

z******e
发帖数: 82
75
借用eswine的idea:
public static String test1(String str) {
StringBuilder sb = new StringBuilder();
int len = str.length();
boolean escape = false;
for (int i = 0; i < len; i++) {
char c = str.charAt(i);
// everything between ' '
if (c == '\'') {
escape = true;
while (i < len) {
c = str.charAt(i);
sb.append(c);
if (c == '\'' && !escape) {
break;
} else if (c == '\\') {
escape = !escape;
} else {
escape = false;
}
i++;
}
continue;
}
// everything between " "
if (c == '"') {
escape = true;
while (i < len) {
c = str.charAt(i);
sb.append(c);
if (c == '"' && !escape) {
break;
} else if (c == '\\') {
escape = !escape;
} else {
escape = false;
}
i++;
}
continue;
}
// everything between // \n
if (c == '/' && i + 1 < len && str.charAt(i + 1) == '/') {
i += 2;
while (i < len) {
if (str.charAt(i) == '\n') {
sb.append('\n');
break;
}
i++;
}
continue;
}
// everything between /* */
if (c == '/' && i + 1 < len && str.charAt(i + 1) == '*') {
i += 2;
while (i < len) {
if (str.charAt(i) == '*' && i + 1 < len
&& str.charAt(i + 1) == '/') {
i++;
break;
}
i++;
}
continue;
}
sb.append(c);
}
return sb.toString();
}
test:
---------------------------------------
abc//xyz\nwwe*/*sdfsdsdfda*/s"/*fdfsf*/df//sfs"dcvcd
abc\nwwe*s"/*fdfsf*/df//sfs"dcvcd
/*asd
[EMPTY]
/*asd//s"afasd*/
[EMPTY]
/*asdas/*asd*/sd
sd
//asdasd
[EMPTY]
//asdas\n
\n
//as/*fdsf*/das\n
\n
/*as//das*/\n
\n
char c = '"'; /*this is the test for " */
char c = '"';
char c = '"
char c = '"
char c = "'; /*this is the test for " */
char c = "'; /*this is the test for " */
char c = '"'
char c = '"'
char str = "// and \".";// Test for // and " in a string
char str = "// and \".";
char str[] = "\\"; // test \ inside "
char str[] = "\\";
char str[] = '\"'; // test \ inside "
char str[] = '\"';
char str[] = "\\\""; // another test for \ and " in string
char str[] = "\\\"";
/
/
*
*
/*
[EMPTY]
*/
*/
/ /
/ /
Q*******e
发帖数: 939
76
多于50行的考题就蒜了
d**********x
发帖数: 4083
77
我onsite代码写完了,但是基本也就没有别的时间了。

【在 w****x 的大作中提到】
:
: 写一个吧, 对这块不是很熟悉

1 (共1页)
进入JobHunting版参与讨论
相关主题
Memory Limit Exceeded 错误50行code能解决addbinary 问题么
排列组合害死人啊谁能给贴个大数相减的java code 吗?
问个string combination的问题Reverse Words in a String
Interleave Strings那个题目有O(n)时间 O(1)空间算法么?星期一福利:某公司店面题
Interview exposed上的code写的也不怎么样呀?问个Zenefits电面题目,他家好难。。。
text justification 有人ac吗Google 电面
隔壁讨论FB变态面试官,请教一下leetcode 301题怎么解最优?问一道uber onsite题目
收到G家拒信,发面经java没有指针真麻烦
相关话题的讨论汇总
话题: char话题: slash2话题: slashstar话题: lastc