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元的年終獎。王強決定把年終獎用於購物,他把想買的物品分為兩類:主件與附件,附件是從屬於某個主件的,下表就是一些主件與附件的例子: 主件 附件 電腦 印表機,掃描器 書櫃 圖書 書桌 檯燈,文具 工作椅