1. 程式人生 > >Airbnb coding面的一道程式設計題

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);

相關推薦

Airbnb coding面的一道程式設計

之前在直播的時候Airbnb負責人說他們的coding題難度不會到dp,我就知道肯定是一些字串處理啥的程式設計題了。 果然,Airbnb的coding面是在codePad上手寫程式碼,面試官希望能看到你書寫的過程,所以少用本地ide(呵呵,不除錯讓寫程式設計題是最XX的,所以有些東西你需要及時溝通) 自己給的

2019美團校招一道程式設計

樣例輸入: 4 20 20 100 60 50 30 80 55 100 60 110 88 5 3 10 6 樣例輸出: 94   分析: 經典01揹包問題參考:https://blog.csdn.net/u011321546/article

每天一道程式設計1--查詢

1.題目 在一個二維陣列中(每個一維陣列的長度相同),每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成一個函式,輸入這樣的一個二維陣列和一個整數,判斷陣列中是否含有該整數。 將每一列看作有序的序列進行折半查詢 package com.wx.day01; /

一道程式設計讓老程式設計師鄒起了眉頭,這樣的你會怎麼解?

對程式設計師來說,程式的魅力在於它的變化無窮,對於一門計算機語言來說,他的基礎語法是固定有限的,可是程式設計的花樣卻是千變萬化,無法窮舉,可以用它做出無數個不同領域,不同業務,形形色色的產品,正因為這麼靈活,關於程式設計的題目,也是自然很多,想必面試過的程式設計師都見過各種各樣的面試題,有簡單的,有

每天一道程式設計 LeetCode-Add Two Numbers

首先感謝同學們對小天的支援,今天將再為大家講解一題Add Two Numbers,LeetCode將其歸為中等難度。 題目簡介 用兩個空單鏈表儲存非負整型數,單鏈表的節點以逆序儲存整型數的每一位數字。將兩個整形數相加,並用連結串列返回(實際上也可以用python的list

每天一道程式設計 (補) LeetCode-Container With Most Water

LeetCode上的題目太多了,每道都寫bolg實在是沒必要。接下來,小天會主要講解有趣的和重要的題目,這裡的重要是指題目有很大可能出現在面試中。 題目簡介: 這裡對題目作進一步形式化定義,給定一組非負整型數,題目希望找到兩個數字,使得目標函式最小。 舉例說明:輸入一組

攜程筆試中的一道程式設計

題目:字串去符號。 將輸入的一串字串中的標點符號都刪掉。 輸入樣例:String:a1,b2.c3-d4! 輸出樣例:Stringa1b2c3d4 最一開始想到的就是劍指offer中的{面試題4:替換空格} 時間也很緊就大概想了想沒有怎麼認真考慮。 結果出現覆蓋現象。 然後

華為試題——一道關於指標方面的程式設計(C/C++)

        *p_zero = *p_unzero;         *p_unzero = 0;         p_zero++;     } } void test_exercise001() {     int A[ARRAYSZIE];     default_random_engine e;

百度的一道算法分析:補全括號序列

subst 地址 block lock sub amp 循環 imp not 算法題:補全括號序列 百度二面遇到的一個問題 大概意思就是 給出一個中括號序列,在序列前後可以加中括號字符,補全它。。。 當時沒想起來解決辦法,然後涼涼了,後來專門去搞了這道題,終於搞定 思路在註

java異常試題及程式設計

概念題 1.java中用來丟擲異常的關鍵字是什麼? throw 2.異常和Error的區別? error:是不可捕捉到的,無法採取任何恢復的操作,頂多只能顯示錯誤資訊。 Exception :表示可恢復的例外,這是可捕捉到的 3.什麼是異常? 所謂異常是指程式在執行過程中

java內部類試題介面程式設計

1、內部類的形式是怎樣的? ⒈靜態內部類 ⒉成員內部類 ⒊區域性內部類 ⒋匿名內部類 2、為什麼要有“內部類”? 1、內部類提供了更好的封裝。只能讓外部類直接訪問,不允許同一個包中的其他類直接訪問。 2、內部類可以直接訪問外部類的私有屬性,內部類被當成其外部類成員。但外部類不能訪問內

java基礎試題及程式設計

一程式題 1.判斷101-200之間有多少個素數,並輸出所有素數。(這道題校招筆試常考) package day1; public class Day1{ public static void main(String []args){ int count=0; f

java類試題及程式設計

一程式題 1編寫一個圓類Circle,該類擁有:  ①一個成員變數  Radius(私有,浮點型);  // 存放圓的半徑;         ②兩個構造方法       

一道考驗你設計能力的C++程式設計

看到這道題,我們就開始設計這個影象類了,按照面向物件“依賴倒置”的設計原則,我們站在客戶的立場,來考慮我們這個類該提供哪些介面,很快我們設計瞭如下一個類:  class CSimplePicture { public: CSimplePicture(char* init[], i

2018校招深信服程式設計試題

第一題: 順時針輸出矩陣元素: def printMatrix(matrix): res = [] while matrix: res += matrix.pop(0) if matrix and matrix[0]:

演算法的重要性------一道小小程式設計

在QQ前端交流群遇到一道小小的程式設計練習題,很有意思就隨便練練手,仔細思考偶然發現裡面的奧妙無窮! 【每日思考】給定一個數組arr,和一個數num,請把小於等於num的數放在陣列的左邊,大於num的數放在陣列的右邊。要求:只能在原陣列上操作,並且只得迴圈一遍陣列。 拿到題目不假思索的給出自

字串程式設計一道

編寫一個擷取字串的函式,輸入為一個字串和位元組數,輸出為按位元組擷取的字串。但是要保證漢字不被截去半個,列如“人ABC”4應該擷取為“人AB”,輸入“人ABC們DEF”6,應該輸出“人ABC”而不是“人

一道引數解析程式設計

題目不難,但我遇到了一些問題,除錯了一會,故在此標記 解析規則:  1.引數分隔符為空格  2.對於用“”包含起來的引數,如果中間有空格,不能解析為多個引數。比如在命令列輸入xcopy /s “C:\program files” “d:\”時,引數仍然是4個,第3個引數應

一道js程式設計:用js實現棧的出棧,入棧等操作

這是4月份快手前端實習筆試的一道程式設計題,要求是實現: 入棧:NumberStack.push(num) 、出棧:NumberStack.pop() 、找出棧中第n大的數:NumberStack.max(n) //下面是我的版本 function Num

一道可用揹包問題解的華為程式設計

題目描述 王強今天很開心,公司發給N元的年終獎。王強決定把年終獎用於購物,他把想買的物品分為兩類:主件與附件,附件是從屬於某個主件的,下表就是一些主件與附件的例子: 主件 附件 電腦 印表機,掃描器 書櫃 圖書 書桌 檯燈,文具 工作椅