Airbnb coding面的一道程式設計題

2021-08-20 17:55:52 字數 2746 閱讀 7434

之前在直播的時候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)

}else

if(str[pos]==='"'&& flag===1) else

if(str[pos]===','&&flag===0)

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 pa2 = /"([^"]+)",/;

let re2 = new

regexp(pa2,'g');

let ans2 = str.match(re2);

console.log(ans2);

if(ans2.length!==null) );

};// let pa3 = /[^"|]+,/;

// let re3 = new regexp(pa3,'g');

// let ans3 = str.match(re3);

// console.log(ans3);

// if(ans3.length!==null) );

// };

// console.log(str);

// str.split(',').map(function(d,i) );

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

// if(flag)

// tmp = d;

// if(d[0]!=='"')

// });

// let len = str.length;

// for(let i = 0; i < len; i++)

console.log(str);

}done(str2);

c 裡面的namespace基礎(一)

面我門說說如何建立乙個namespace!定義乙個namespace首先需要包含 namespace 格式如下 namespace your nsname namespase主體內容 呵呵,給我的感覺就好象和class或struct一樣。不過他們除了形式有類似外,確實在很多方面都不相同,具體我們以後...

go語言 介面的思考(一)

在 學習go語言 中,有乙個例子,說得是怎樣做乙個通用的介面來實現給數字,字串來排序。第一種思路 1.定義乙個函式,可以接收任意型別做為入參,然後 在函式內,根據入參來判斷是那乙個型別 func sort i inte ce 在呼叫時,sort int 我們傳入了乙個陣列,很不幸,go不能 隱式 轉...

關於介面的統一驗證

核心基類呼叫統一驗證 use framework lib controller use framework extend des 控制器到父類做一些公共到業務處理 class commoncontroller class commoncontroller extends controller 執行父...