Airbnb coding面的一道编程题

之前在直播的时候Airbnb负责人说他们的coding题难度不会到dp,我就知道肯定是一些字符串处理啥的编程题了。

果然,Airbnb的coding面是在codePad上手写代码,面试官希望能看到你书写的过程,所以少用本地ide(呵呵,不调试让写编程题是最XX的,所以有些东西你需要及时沟通)

自己给的三四个test case,要求输出对应的结果就行了(比ACM是相当宽松了)。

题目是这样的,很简单:

有这样的文本(我转js的字符串了)

let str1 = 'rwer321,dad,adas,ytruty,yihgf';
let str2 = '"ha,ua",sa,da,""da,da"",dad';
let str3 = 'dasd,""asddad"",fsfsf,gdfg,1';
let str4 = '"ha,ua",sa,da,"""da,da""",dad

要求对应转换成这样的:

rwer321|dad|adas|ytruty|yihgf
ha,ua|sa|da|"da,da"|dad
dasd|"asddad"|fsfsf|gdfg|1
ha,ua|sa|da|""da,da""|dad

本意就是单词分词,逗号分开每个单词,但是用引号包围的是一个整体单词,不能随便用逗号分开,如果超过一双引号以上,去掉一层引号引导,剩下的是一个整体,相当于把引号转义称文本单词中的一部分。

一开始思路受到之前项目的影响,之前写亲测模版的时候用到很多正则表达式,于是这里也想用正则,但是是走不通的(事后我用正则想了几个小时,还是不能适用这道题的所有情况)。所以老老实实当作字符串题目来做。

C++很久没写了,不现查C++的api就写不了,所以现在完全是入了js的坑了。其实感觉js写起来更顺畅一些,因为函数库和字符串没C++那么复杂。

我的代码,线性时间复杂度,用deep记录下引号的深度同时记录单词的起始位置和终止位置,分好情况即可:

let str1 = 'rwer321,dad,adas,ytruty,yihgf';
let str2 = '"ha,ua",sa,da,""da,da"",dad';
let str3 = 'dasd,""asddad"",fsfsf,gdfg,1';
let str4 = '"ha,ua",sa,da,"""da,da""",dad'

function done(str) {
    str += ',';
    let len = str.length;
    let deep = 0;
    let flag = 0;
    let start = 0;
    let end = 0;
    let res = [];
    let pos = 0;
    while (pos < len) {
        if (str[pos] === '"'&&flag!==1) {
            flag = 1;
            start = pos;
            while(str[pos]==='"') {
                deep++;
                pos++;
            }
        }else if(str[pos]==='"'&& flag===1) {
            res.push(str.slice(start+1,pos+deep-1));
            pos+=deep;
            start = pos+1;
            deep=0;
            flag=0;
        }else if(str[pos]===','&&flag===0) {
            res.push(str.slice(start,pos));
            start = pos+1;
        }
        pos++;
    }
    res = res.join("|");
    return res;
}

console.log(done(str1));
console.log(done(str2));
console.log(done(str3));
console.log(done(str4));

之前用正则去做,走不通,麻烦有人用正则做出来了通知我一下,谢谢。


let str1 = 'rwer321,dad,adas,ytruty,yihgf';
let str2 = '"hfg,utyut",sasa,dadas,""dada,dasd"",dad';
let str3 = 'dasd,""asddad"",fsfsf,gdfg,1';

// dada, adads|dada|dasd
// dasd|"asddad"|fsfsf|gdfg|1

function done(str) {
  let res = [];
  str += ",";

  let Pa1 = /""([^"]+)""/;
  let re1 = new RegExp(Pa1,'g');
  let ans1 = str.match(re1);
  console.log(ans1);
  if(ans1.length!==null) {
    ans1.map(function(d,i){
      // console.log(d);
      // d = d.replace(",","^001");
      // console.log(d);
      str = str.replace(d+",", d.slice(1,-1)+"|");
    });
  };

  let Pa2 = /"([^"]+)",/;
  let re2 = new RegExp(Pa2,'g');
  let ans2 = str.match(re2);
  console.log(ans2);

  if(ans2.length!==null) {
    ans2.map(function(d,i){
      // d = d.replace(",","^001");
      str = str.replace(d,d.slice(1,-2)+"|");
    });
  };

  // let Pa3 = /[^"|]+,/;
  // let re3 = new RegExp(Pa3,'g');
  // let ans3 = str.match(re3);
  // console.log(ans3);

  // if(ans3.length!==null) {
  //   ans3.map(function(d,i){
  //     str = str.replace(d,d.slice(1,-2)+"|");
  //   });
  // };
  // console.log(str);
  // str.split(',').map(function(d,i) {
  //   res.push(d);
  // });
  // let ans = res.join('|');

  // console.log(str);

  // let re = new RegExp(Pattern,'g');
  // let Pattern = /"(.*)"/;

  // let re = new RegExp(Pattern,'g');

  // let tmp;
  // let res = str.split(',').map(function(d,i) {
  //   let flag = 0;
  //   let len = d.length;
  //   if(d[len-1]==='"') {
  //     tmp += d;
  //     flag = 1;
  //   }
  //   if(flag) {
  //     return tmp.slice(1,-1);
  //   }
  //   tmp = d;
  //   if(d[0]!=='"') {
  //     return d;
  //   }
  // });

  // let len = str.length;
  // for(let i = 0; i < len; i++) {

  // }
  console.log(str);
}

done(str2);

原文地址:https://www.cnblogs.com/zhangmingzhao/p/9181107.html

时间: 2024-08-27 14:40:57

Airbnb coding面的一道编程题的相关文章

一道编程题实在是不知道哪个地方错了

求帮忙 一道觉得很简单的编程题,提交了很多次,但是,还是wrong,实在是崩溃啊,真的不知道哪里错了,希望大家可以帮忙解决一下,感激不尽. 就是这道题----Conversions Description Conversion between the metric and English measurement systems is relatively simple. Often, it involves either multiplying or dividing by a constant

对一道编程题的后续思考

原题来自<一道整数求值作业> 题目描述:给定一个整数 X,找到组成的数字和 X 完全相同的,且大于 X 的最小的那个数:若不存在这样的数,输出 0 一开始把它想复杂了,后来想想只需将该数组成的数列从后往前枚举,然后判断当前位置往后的数列是否是降序即可,时间复杂度O(n),详细思路跟上文一致可以参考原文. var a = 21544221; // 要求的数字 var s = a.toString(); var len = s.length; for(var i = len - 2; i >

thoughtworksd一道编程题

--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 商品税的计算: 国内商品除食物.书籍

赛码网的一道百度编程题

最近偶尔接触到这个赛码网,看了百度的一道编程题,于是尝试了一下,发现虽然天天写代码实现这个居然花了我好长时间,仍然没有通过全部案例.目前给的通过率是83% 题目如下: 小B最近对电子表格产生了浓厚的兴趣,她觉得电子表格很神奇,功能远比她想象的强大.她正在研究的是单元格的坐标编号,她发现表格单元一般是按列编号的,第1列编号为A,第2列为B,以此类推,第26列为Z.之后是两位字符编号的,第27列编号为AA,第28列为AB,第52列编号为AZ.之后则是三位.四位.五位--字母编号的,规则类似. 表格单

【求助】一道考验脑细胞的编程题

要求计算S的面积.注意:仅计算面积,不区分正负,如果围成的图形被x轴分割为上下两部分,那么就求上下两部分面积之和. 输入多项式fx,以字符串表示,格式为:4*x^5-x^2+5*x+12,多项式表达式不包含括号,可能包含空格.数字.字母x.^.*.+.-,保证多项式最高次幂为非负整数,且最高次幂不超过10. 表达式中4*x^5与4x^5等价,如下面的表达式是合法的: x^10-5x^1 -4*x^1 + 5x^0 2.3x^4 - 2.56*x + 1 输入不会出现下列类型的表达式: x(x+5

上海华为的一道关于指针方面的编程题(C/C++)

int A[nSize],其中隐藏着若干0,其余非0整数,写一个函数int Func(int* A, int nSize),使A把0移至后面,非0整数移至数组前面并保持有序,返回值为原数据中第一个元素为0的下标. 尽可能不使用辅助空间且考虑效率及异常问题,注释规范且给出设计思路 注:我的方法的复杂度为O(n),大家如果有其它方法希望可以交流一下. /* author: jiangxin Blog: http://blog.csdn.net/jiangxinnju */ #include <ios

一道模板元编程题源码解答(replace_type)

今天有一同学在群上聊到一个比较好玩的题目(本人看书不多,后面才知是<C++模板元编程>第二章里面的一道习题), 我也抱着试一试的态度去完成它, 这道题也体现了c++模板元编程的基础和精髓: 类型就是数据. 题目如下所述: Write a ternary metafunction replace_type<c,x,y> that takes an arbitrary compound type c as its first parameter, and replaces all oc

一道有意思的C语言编程题

最近在看经典的C语言入门书籍K&R,虽然是一本入门书籍,可是其中的精妙之处却需要慢慢体会.其中的经典题很多,仔细琢磨一定会收获良多. 今天看到这样一道题:编写一个删除C语言程序中所有的注释语句.感觉颇有意思,与大家一起分享一下: 我的思路: 找到注释的起始符号 \ 判断紧接着的输入字符,如果是*或者是\,则说明后面全是注释,跳过即可,否则照样输出 其他则直接输出 疑问: 所配套的答案书中提出要考虑引号后面的内容以做出响应,不是很明白这是为什么.个人认为无需考虑引号的影响也能将注释去除,希望有高手

算法是什么我记不住,But i do it my way. 解一道滴滴出行秋招编程题。

只因在今日头条刷到一篇文章,我就这样伤害我自己,手贱. 刷头条看到一篇文章写的滴滴出行2017秋招编程题,后来发现原文在这里http://www.cnblogs.com/SHERO-Vae/p/5882357.html.看了下,挺有意思,于是就想了想,又写了写,最终撸出来了.刚开始一看顿时感觉很熟悉,大学数据结构和算法课肯定讲过相关东西,什么深度搜索,广度搜索,最优路径,最优解...但是现在你让我说个一二三,我还就只记住几个名字,说不定名字都记错.我向来不喜欢死记东西,能查到的真的不想背下来,而