成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Problem 4:替換空格(字符串)

wenyiweb / 3451人閱讀

摘要:注用替換的原因,空格在碼中的序號為,用十六進(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ù)制提高效率的思路)

三、Java實(shí)現(xiàn)

方法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

相關(guān)文章

  • JavaScript 編程精解 中文第三版 九、正則表達(dá)式

    摘要:使用構(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...

    Pluser 評論0 收藏0
  • 【劍指offer】2.替換空格

    摘要:例如,當(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)...

    Leo_chen 評論0 收藏0
  • ES6 系列之模板符串

    摘要:最終的代碼如下第二版假設(shè)有這樣一段為了保持可讀性,我希望最終輸入的樣式為其實(shí)就是匹配每行前面的空格,然后將其替換為空字符串。 基礎(chǔ)用法 let message = `Hello World`; console.log(message); 如果你碰巧要在字符串中使用反撇號,你可以使用反斜杠轉(zhuǎn)義: let message = `Hello ` World`; console.log(mes...

    Travis 評論0 收藏0

發(fā)表評論

0條評論

最新活動(dòng)
閱讀需要支付1元查看
<