不满足作对(JZ2 替换空格(Java))
菜雞程序猿第一次寫(xiě)博客
秋招結(jié)束后,處處不如意,為了更好的學(xué)習(xí)并記錄,遂開(kāi)始試著寫(xiě)寫(xiě)博客
第一篇博客,獻(xiàn)給劍指offer
關(guān)于劍指offer題2(空格替換)的一些自己的看法
題目描述:請(qǐng)實(shí)現(xiàn)一個(gè)函數(shù),將一個(gè)字符串中的每個(gè)空格替換成“%20”。例如,當(dāng)字符串為We Are Happy.則經(jīng)過(guò)替換之后的字符串為We%20Are%20Happy。
因?yàn)楸救藢W(xué)的是Java,一看到題目,立馬想到String.replace()。
第一次提交的代碼:
AC了,時(shí)間12ms,空間9800k
由于以前在LeetCode中做過(guò)題,感覺(jué)12ms時(shí)間好長(zhǎng)啊,想要優(yōu)化,心想自己實(shí)現(xiàn)會(huì)不會(huì)效果好點(diǎn),遂自己實(shí)現(xiàn)并提交
第二次提交的代碼:
啊哈~同樣AC了,但是時(shí)間13ms,空間9824k,時(shí)間空間全大了,what 回事?
本著刨(jia)根(zhuang)問(wèn)(xue)底(xi)的心態(tài),alt+鼠標(biāo)左鍵,源碼如下:
這。。。這是啥?繼續(xù)刨(jia)根(zhuang)問(wèn)(xue)底(xi)。。。目測(cè)是通過(guò)正則表達(dá)式來(lái)進(jìn)行替換的。。。。然后怎么個(gè)流程。。。。完全繞萌幣了。。。繞了半天找到了替換方法,此處不粘代碼了,發(fā)現(xiàn)和我代碼不同的地方主要是在charAt處,官方應(yīng)用的String對(duì)象,我用的是StringBuilder
是不是有什么關(guān)系?
因此第3次自己實(shí)現(xiàn),代碼如下:
提交,AC,時(shí)間12ms,空間9706k,雖然時(shí)間沒(méi)有優(yōu)化,但是空間略微少了點(diǎn)。
思考:執(zhí)行效率不是StringBuilder>StringBuffer>String 嗎?為啥這道題改成了String反而更快了呢?
分析:
1)通過(guò)對(duì)比,發(fā)現(xiàn)主要區(qū)別在charAt()方法上,StringBuffer在調(diào)用的是父類AbstractStringBuilder的方法,該方法在會(huì)先檢查下標(biāo)是否越界,然后在進(jìn)行返回
2)從線程安全方面看,StringBuffer是線程安全的,對(duì)應(yīng)方法會(huì)進(jìn)行加鎖,StringBuilder和String是非線程安全的,可能這也有關(guān)。
就這樣吧,也不知道分析的對(duì)不對(duì),也不會(huì)進(jìn)一步優(yōu)化!
菜雞程序猿就是我,我就是菜雞程序猿!
總結(jié)
以上是生活随笔為你收集整理的不满足作对(JZ2 替换空格(Java))的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 第一章 计算机基础知识随堂练习,计算机应
- 下一篇: Win7升级Win10系统提示错误0x8