3.20一周題目總結(jié)

小伙子們,春招戰(zhàn)場簡直是如火如荼啊,各位想必收貨頗多吧~,這一周小編依舊給各位帶來幾道經(jīng)典題目:

第一題:不要借助臨時變量,實(shí)現(xiàn)兩個數(shù)字的交換?

這道題圈友給出了很多答案,正如小蟲大神所說:

位運(yùn)算高級,es6飄逸,并提供另一種笨辦法:a=a-b;b=a+b;a=b-a

不過xm同學(xué)說的很對,確實(shí)需要考慮大數(shù)溢出的情況,用c的同學(xué)整數(shù)溢出學(xué)的不錯,贊一個。而對于js來說精度問題也很明顯(你試試var a=你的身份證號試試)~

當(dāng)然這些你都可以用截取等方法輕松繞過,這里不在贅敘。先扯普通情況下的方法~

let a = 1 , b = 2 ;

[a , b] = [b , a] ;

a=a^b;

b=a^b;

a=a^b;

第二題:統(tǒng)計(jì)一個字符串中出現(xiàn)最多的字母:給出一個字符串,統(tǒng)計(jì)出現(xiàn)次數(shù)最多的字母。如:“wqeqwhixswiqhdxsq”,其中出現(xiàn)最多的是q。

這道題比較好想的一種方法就是遍歷,先轉(zhuǎn)換為數(shù)組,然后在遍歷過程中記錄每個字母出現(xiàn)的次數(shù),之后再找出次數(shù)最多的字母。這種方法比較直接的算法。還有人想到可以先對數(shù)組進(jìn)行排序,排序后只需要跟后面的字母比較就可以記錄字母出現(xiàn)的次數(shù)。這些方法都可以,這里講一個比較‘奇葩’的方法,直接擼代碼:

while(str != ""){

? ? var oldstr = str;

? ? var getstr = str.substr(0,1);

? ? str = str.replace(new RegExp(getstr,"g"),"");

? ? if (oldstr.length - str.length >maxlength){

? ? ? ? ?maxlength = oldstr.length - str.length;

? ? ? ? ? result = getstr + '='+ maxlength;

? ? }

}

對,你沒有看錯,通過正則函數(shù)替換一步步把字符串替換成空。。。。是不是很贊~

原文如下:利用正則找出字符串中出現(xiàn)最多的字母

第三題:怎么找到一個字符串的最大回文子串,如“abccbaba”的最大回文子串是“abccba”?

這道題方法也很多,復(fù)雜度差異也很大,這里小編發(fā)一個算法叫做Manacher的算法:

先在每兩個相鄰字符中間插入一個分隔符,當(dāng)然這個分隔符要在原串中沒有出現(xiàn)過。一般可以用‘#’分隔。這樣就非常巧妙的將奇數(shù)長度回文串與偶數(shù)長度回文串統(tǒng)一起來考慮了

如 #1#跟#1#1#都是奇數(shù)

然后用一個輔助數(shù)組 P[i] 來記錄以字符為中心的最長回文子串向左/右擴(kuò)張的長度。

這個算法有點(diǎn)復(fù)雜,在這里直接貼算法講解及代碼了:Manacher算法思路?Manacher算法代碼

第四題:如何合并兩個數(shù)組,如[1,2,3]與[a,b,c]合并為[1,2,3,a,b,c]?

對于js來說,這道題又是可以一步出結(jié)果的,比如使用concat,或者push

for(var i in b){

? ? ? ? a.push(b[i]);

}

甚至可以直接 、、、、

var a=[...[1,2,3],...[‘a(chǎn)’,‘b’,‘c’]]

幺鹿大神又來秀函數(shù)式編程,我就不扯了、、、、

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容