摘要:注用替換的原因,空格在碼中的序號為,用十六進(jìn)制表示為。在第一個(gè)空格處,空格替換為,空格之后的字符全部右移三個(gè)位置。同理,第一次移動(dòng)后,向后遍歷,在第二個(gè)空格處繼續(xù)將后邊字符移動(dòng)。因此后者應(yīng)舍去,否則會(huì)不通過??蜏y試。
一、題目描述
請實(shí)現(xiàn)一個(gè)函數(shù),將一個(gè)字符串中的每個(gè)空格替換成“%20”。例如,當(dāng)字符串為We Are Happy.則經(jīng)過替換之后的字符串為We%20Are%20Happy。
注:用%20替換的原因,空格在ASCII碼中的序號為32,用十六進(jìn)制表示為0x20。
參考劍指offer上的說明,需要考慮操作是原地(in place)操作還是新建字符串操作。以原地操作為例,首先考慮最直觀的方法-從前往后依次替換。在第一個(gè)空格處,空格替換為%20,空格之后的字符全部右移三個(gè)位置。同理,第一次移動(dòng)后,向后遍歷,在第二個(gè)空格處繼續(xù)將后邊字符移動(dòng)。
從算法角度分析,設(shè)輸入規(guī)模為n,我們需要循環(huán)遍歷字符串中空格(循環(huán)中,判斷是否為空的操作執(zhí)行n次),在每個(gè)空格處,進(jìn)行字符移動(dòng)操作,每個(gè)字符的移動(dòng)又相當(dāng)于一次循環(huán)。因此,總的運(yùn)行效率為
$$ O(n^2) $$
直接遍歷移動(dòng)的方法效率太低,因此,考慮其他方法。
方法1:
考慮比Sting高效的字符串操作工具-StringBuffer,同樣使用之前的直接遍歷的方法,但是對比發(fā)現(xiàn),不需要重復(fù)移動(dòng),每次判斷執(zhí)行一次操作,共執(zhí)行n此判斷,效率為O(n)
方法2:
不使用StringBuffer,參考劍指offer書上的方法,在原字符串上進(jìn)行操作,利用兩條指針進(jìn)行數(shù)據(jù)移動(dòng)的思路,具體見方法2代碼。(注意倒序復(fù)制提高效率的思路)
方法1源程序:
package jz_offer; public class problem04 { public static String spaceReplace(String str) { StringBuffer newStr=new StringBuffer(); int length=str.length(); //特殊情況, if(str==null) return null; for(int i=0;i(2019/2/17 增加)注:特殊情況下原條件為str==null||length==0,后者為空字符串,輸出應(yīng)仍為空字符。因此后者應(yīng)舍去,否則OJ會(huì)不通過(??蜏y試)。
方法2部分程序:
//2、使用臨時(shí)字符數(shù)組 public static String spaceReplace2(String str) { int length=str.length(); int spaceCount=0; for(int i=0;i=0;i--) { if(str.charAt(i)==" ") { newStrArray[j]="0"; newStrArray[j-1]="2"; newStrArray[j-2]="%"; j=j-3; } else { newStrArray[j]=str.charAt(i); j--; } } return new String(newStrArray); }
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/73257.html
摘要:使用構(gòu)造器時(shí),需要將模式書寫成普通的字符串,因此反斜杠的使用規(guī)則與往常相同。構(gòu)造器的后四個(gè)參數(shù)小時(shí)分鐘秒毫秒是可選的,如果用戶沒有指定這些參數(shù),則參數(shù)的值默認(rèn)為。 來源:ApacheCN『JavaScript 編程精解 中文第三版』翻譯項(xiàng)目原文:Regular Expressions 譯者:飛龍 協(xié)議:CC BY-NC-SA 4.0 自豪地采用谷歌翻譯 部分參考了《JavaScript...
摘要:例如,當(dāng)字符串為則經(jīng)過替換之后的字符串為。題目說的不太嚴(yán)謹(jǐn)能不能允許連續(xù)出現(xiàn)多個(gè)空格若有可能連續(xù)多個(gè)空格,用多個(gè)還是單個(gè)進(jìn)行替換分三種情況解答不會(huì)出現(xiàn)連續(xù)多個(gè)空格直接用空格將字符串切割成數(shù)組,在用進(jìn)行連接。 題目描述 請實(shí)現(xiàn)一個(gè)函數(shù),將一個(gè)字符串中的每個(gè)空格替換成%20。例如,當(dāng)字符串為We Are Happy.則經(jīng)過替換之后的字符串為We%20Are%20Happy。 題目說的不太嚴(yán)...
摘要:最終的代碼如下第二版假設(shè)有這樣一段為了保持可讀性,我希望最終輸入的樣式為其實(shí)就是匹配每行前面的空格,然后將其替換為空字符串。 基礎(chǔ)用法 let message = `Hello World`; console.log(message); 如果你碰巧要在字符串中使用反撇號,你可以使用反斜杠轉(zhuǎn)義: let message = `Hello ` World`; console.log(mes...
閱讀 1057·2021-11-15 18:11
閱讀 3177·2021-09-22 15:33
閱讀 3473·2021-09-01 11:42
閱讀 2671·2021-08-24 10:03
閱讀 3632·2021-07-29 13:50
閱讀 2939·2019-08-30 14:08
閱讀 1286·2019-08-28 17:56
閱讀 2268·2019-08-26 13:57