之前在直播的時候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 執行父...