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