《数据科学面试40+真题讲解》,K神本年度最后一次开课


一亩三分地论坛

 找回密码
 Sign Up 注册获取更多干货
码农求职神器Triplebyte:
不用海投,内推你去多家公司面试
Airbnb 数据科学职位
in analytics and inference
天天打游戏、照样领工资,
你要不要来?
把贵司招聘信息放这里
查看: 3572|回复: 9
收起左侧

FB的那道remove comment解答

[复制链接] |试试Instant~ |关注本帖
zengm321 发表于 2015-3-5 14:30:06 | 显示全部楼层 |阅读模式

2015(1-3月) 码农类 硕士 全职@Facebook - 内推 - 技术电面 |Other

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

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

x
看大家的FB面经,感觉remove comment这道题很困扰大家
好吧,我来贴个链接,攒个rp。 大家互相帮助,信息共享,祝大家早日拿到满意offer。
虽然不完全一样,但是基本解决问题,而且还同时解决了"//"。单行注释的问题。
http://geeksquiz.com/remove-comments-given-cc-program/

. 鐗涗汉浜戦泦,涓浜╀笁鍒嗗湴
string removeComments(string prgm)
{
    int n = prgm.length();
    string res;. 1point3acres.com/bbs

    // Flags to indicate that single line and multpile line comments
    // have started or not.
    bool s_cmt = false;
    bool m_cmt = false;


    // Traverse the given program
    for (int i=0; i<n; i++)
    {
        // If single line comment flag is on, then check for end of it
        if (s_cmt == true && prgm == '\n')
            s_cmt = false;

        // If multiple line comment is on, then check for end of it
        else if  (m_cmt == true && prgm == '*' && prgm[i+1] == '/')
            m_cmt = false,  i++;

        // If this character is in a comment, ignore it
        else if (s_cmt || m_cmt)
            continue;

        // Check for beginning of comments and set the approproate flags
        else if (prgm == '/' && prgm[i+1] == '/'). Waral 鍗氬鏈夋洿澶氭枃绔,
            s_cmt = true, i++;
        else if (prgm == '/' && prgm[i+1] == '*'). From 1point 3acres bbs
            m_cmt = true,  i++;. 鐣欏鐢宠璁哄潧-涓浜╀笁鍒嗗湴

        // If current character is a non-comment character, append it to res
        else  res += prgm;
    }. 1point3acres.com/bbs
    return res;
}
.1point3acres缃

评分

2

查看全部评分

sunnyiez 发表于 2015-3-11 05:25:52 | 显示全部楼层
This problem should use automaton to handle. My automaton has four states. The initial state is 0, indicting non-commented part.

. more info on 1point3acres.com#include <iostream>
. from: 1point3acres.com/bbs using namespace std;

void remove_comment (string str)
{
        int status = 0 ;
.1point3acres缃        for (int i = 0; i < str.size(); ++ i) .鏈枃鍘熷垱鑷1point3acres璁哄潧
        {
                char ch = str ;
                switch (status)
                {
                case 0 : if (ch == '/') status = 1; else std::cout<<ch ; break;
                case 1 : if (ch == '*') status = 2; else { status = 0; std::cout<<'/'<<ch ;} break;
                case 2 : if (ch == '*') status = 3; else ; break;
-google 1point3acres                case 3 : if (ch == '/') status = 0; else status = 2 ; break;  
                }
        }
鏉ユ簮涓浜.涓夊垎鍦拌鍧. }

int main()
. visit 1point3acres.com for more.{. visit 1point3acres.com for more.
        // test ;. 鐣欏鐢宠璁哄潧-涓浜╀笁鍒嗗湴
        string str1 = "/* hello world*/Hello world" ;
        remove_comment (str1) ; std::cout<<std::endl; .1point3acres缃
        string str2 = "out/*** * /*no output */put"  ;
        remove_comment (str2) ; std::cout<<std::endl;. 鍥磋鎴戜滑@1point 3 acres
        string str3 = "/**/out/*** * \n /* \n no output */put/*///* * /* ///* */"  ;  -google 1point3acres
        remove_comment (str3) ; std::cout<<std::endl;
}


补充内容 (2015-3-11 05:30):
char ch = str [   i ]
回复 支持 1 反对 0

使用道具 举报

houqingniao 发表于 2015-3-5 20:51:33 | 显示全部楼层
多谢楼主~~
但是里面好像是有bug的吧
prgm == '*' && prgm[i+1] == '/') 这个i+1会不会抛出index out of。。。
回复 支持 1 反对 0

使用道具 举报

sunfish 发表于 2015-3-5 14:56:17 | 显示全部楼层
非常感谢楼主,楼主的精神真值得我么你学习。
回复 支持 反对

使用道具 举报

rengokantai 发表于 2015-3-5 21:46:48 | 显示全部楼层
论坛的系统得改一下了,那个数组i标志总是被当做italic标签被吃掉,不利于代码交流
回复 支持 反对

使用道具 举报

sunnyiez 发表于 2015-3-11 05:34:34 | 显示全部楼层
Below is the automaton I designed. FYI.

                               
登录/注册后可看大图


回复 支持 反对

使用道具 举报

wendy33 发表于 2015-3-11 23:12:04 | 显示全部楼层
sunnyiez 发表于 2015-3-11 05:34
Below is the automaton I designed. FYI.

点赞!! 字数字数
回复 支持 反对

使用道具 举报

thewave 发表于 2015-10-21 07:40:37 | 显示全部楼层
sunnyiez 发表于 2015-3-11 05:34
Below is the automaton I designed. FYI.

In state 3, if receive another '*', state should stay at 3..鏈枃鍘熷垱鑷1point3acres璁哄潧

Good point to use DFA.
I think DFA is always worth consideration if input is related to stream and pattern, such as this question, and strstr.
. 1point3acres.com/bbs
string removeComments(string input){
. 鐣欏鐢宠璁哄潧-涓浜╀笁鍒嗗湴        //design FSM
        int state = 0;
        string res = "";. 鐣欏鐢宠璁哄潧-涓浜╀笁鍒嗗湴
        for(int i=0;i<input.length();i++){
            char ch = input;
            switch(state){.1point3acres缃
                case 0:
                    if(ch=='/')state = 1;
                    else res += ch;. 鍥磋鎴戜滑@1point 3 acres
                    break;
                case 1:
                    if(ch=='/')state = 20;
                    else if(ch=='*')state = 30;.鏈枃鍘熷垱鑷1point3acres璁哄潧
                    else {
                        res += '/' + ch;
                        state = 0;.鐣欏璁哄潧-涓浜-涓夊垎鍦
                    }
                    break;
                case 20: //single line comment
                    if(ch=='\n')state = 0;
                    break;
                case 30:   //multiple line comments
                    if(ch=='*')state = 31;
                    break;. 1point 3acres 璁哄潧
                case 31:
                    if(ch=='/')state = 0;
                    else if(ch=='*')state = 31;
                    else state = 30;
                    break;
            }
        }
    }



补充内容 (2015-10-21 07:44):. Waral 鍗氬鏈夋洿澶氭枃绔,
不好意思,忘记return res;
回复 支持 反对

使用道具 举报

gamespeed 发表于 2015-10-27 04:04:59 | 显示全部楼层
有个边界条件,即每次访问prgm[i+1]时,需要先检查i+1<n
回复 支持 反对

使用道具 举报

zzhmxf 发表于 2016-10-23 08:07:14 | 显示全部楼层
想问一下各位,如果代码里面有类似这么一句:
String s = "asf\"daf/*";. 鐣欏鐢宠璁哄潧-涓浜╀笁鍒嗗湴
那如何处理quote 里面的 /*  以及string里面的quote?
谢谢啦。
回复 支持 反对

使用道具 举报

本版积分规则

关闭

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

手机版|小黑屋|一亩三分地论坛声明

custom counter

GMT+8, 2017-11-18 12:47

Powered by Discuz! X3

© 2001-2013 Comsenz Inc. Design By HUXTeam

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