摘要:接下來要想提速,就在正則表達(dá)式和字符串拼接這兩部分。在這篇文章,作者拼接了個(gè)英文字母次,速度差別達(dá)到了上萬倍。還有一個(gè),與的區(qū)別就是是線程安全的,是線程不安全的。
Reverse Words in a String https://oj.leetcode.com/problems/reverse-words-in-a-string/
Given an input string, reverse the string word by word.
For example, Given s = "the sky is blue", return "blue is sky the".
剛開始的想法就是用Java的split函數(shù)來把詞分到數(shù)組里,然后反向加一下,剛開始是這么寫的
public class Solution { public String reverseWords(String s) { String result = ""; String[] words = s.trim().split(" "); String space = ""; for(int i = words.length - 1; i >= 0; i--){ result += space; result +=words[i]; space = " "; } return result; } }
后來發(fā)現(xiàn)題目還會(huì)有多個(gè)空格,split函數(shù)你傳給它一個(gè)空格它就只按一個(gè)空格來分割,不像python等語言如果你默認(rèn)不給參數(shù)就會(huì)按照空白來分,包括多個(gè)空格,制表符等。
經(jīng)過查資料還知道split函數(shù)的參數(shù)其實(shí)是正則表達(dá)式,這樣就能用正則來識(shí)別多個(gè)空格了,然后我將s+傳給split函數(shù)來匹配任意空格,然后一提交,發(fā)現(xiàn)超時(shí)了,系統(tǒng)返回的信息提示上次處理的數(shù)據(jù)的長度竟然有50000。
然后我將split的參數(shù)改成[ ]+,只匹配多個(gè)空格,還是超時(shí)。接下來要想提速,就在正則表達(dá)式和字符串拼接這兩部分。我先試了字符串拼接,用StringBuffer而不是String的+=來拼接,然后就順利通過了,代碼如下。
public class Solution { public String reverseWords(String s) { String[] words = s.trim().split("[ ]+"); String space = ""; StringBuffer sb = new StringBuffer(); for(int i = words.length - 1; i >= 0; i--){ sb.append(space); sb.append(words[i]); space = " "; } return sb.toString(); } }
看來以后用字符串拼接還是用StringBuffer好,省時(shí)間太多了,因?yàn)镾tring的+=拼接會(huì)一直創(chuàng)建新的String對(duì)象,StringBuffer就不需要重新創(chuàng)建對(duì)象。在這篇文章http://blog.csdn.net/yirentianran/article/details/2871417,作者拼接了26個(gè)英文字母5000次,速度差別達(dá)到了上萬倍。
還有一個(gè)StringBuilder,StringBuilder與StringBuffer的區(qū)別就是StringBuffer是線程安全的,StringBuilder是線程不安全的。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/64077.html
摘要:分布式的管理和當(dāng)我在談?wù)摷軜?gòu)時(shí)我在談啥狀態(tài)碼詳解無狀態(tài)協(xié)議和請(qǐng)求支持哪些方法分層協(xié)議棧有哪些數(shù)據(jù)結(jié)構(gòu)運(yùn)用場景說說你常用的命令為什么要有包裝類面向?qū)ο蟮奶卣魇巧妒巧队惺裁春锰幭到y(tǒng)設(shè)計(jì)工程在線診斷系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)索引背后的數(shù)據(jù)結(jié)構(gòu)及算法原理軟技能 HTTP 【HTTP】分布式session的管理 【HTTP】Cookie和Session 【HTTP】當(dāng)我在談?wù)揜estFul架構(gòu)時(shí)我在談啥?...
摘要:有效三角形的個(gè)數(shù)雙指針最暴力的方法應(yīng)該是三重循環(huán)枚舉三個(gè)數(shù)字??偨Y(jié)本題和三數(shù)之和很像,都是三個(gè)數(shù)加和為某一個(gè)值。所以我們可以使用歸并排序來解決這個(gè)問題。注意因?yàn)闅w并排序需要遞歸,所以空間復(fù)雜度為 ...
摘要:關(guān)于遞歸這里提一兩點(diǎn)遞歸基本有這幾步遞歸的模板,終止條件,遞歸調(diào)用,邏輯處理。 ?作者簡介:大家好,我是車神哥,府學(xué)路18號(hào)的車神? ?個(gè)人主頁:應(yīng)無所住而生...
Problem A website domain like discuss.leetcode.com consists of various subdomains. At the top level, we have com, at the next level, we have leetcode.com, and at the lowest level, discuss.leetcode.com...
摘要:強(qiáng)烈推薦上值得前端學(xué)習(xí)的數(shù)據(jù)結(jié)構(gòu)與算法項(xiàng)目,包含圖的演示過程與視頻講解。該倉庫包含了多種基于的算法與數(shù)據(jù)結(jié)構(gòu),提供進(jìn)一步閱讀的解釋和鏈接。數(shù)據(jù)結(jié)構(gòu)和算法必知必會(huì)的個(gè)代碼實(shí)現(xiàn)。 showImg(https://segmentfault.com/img/bVbvpYZ); 前言 算法為王。想學(xué)好前端,先練好內(nèi)功,內(nèi)功不行,就算招式練的再花哨,終究成不了高手;只有內(nèi)功深厚者,前端之路才會(huì)走得...
摘要:解題思路這題就是最基礎(chǔ)的遞歸運(yùn)算題目,兩個(gè)選擇,一個(gè)是偶數(shù),一個(gè)是奇數(shù),偶數(shù)直接除操作,奇數(shù)變成左右兩個(gè)偶數(shù)繼續(xù)操作選擇操作最小的,注意有一個(gè)用例是,解決方法有兩種,第一就是首先把的二次冪都干掉,代碼如下 ...
閱讀 2571·2023-04-25 18:13
閱讀 793·2021-11-22 12:10
閱讀 2984·2021-11-22 11:57
閱讀 2148·2021-11-19 11:26
閱讀 2182·2021-09-22 15:40
閱讀 1474·2021-09-03 10:28
閱讀 2711·2019-08-30 15:53
閱讀 1959·2019-08-30 15:44