替換空格 劍指office面試題5

2021-10-06 16:19:49 字數 2040 閱讀 6406

官方解法

力扣鏈結

請實現乙個函式,把字串 s 中的每個空格替換成"%20"。

通過迴圈整個字串,每找到乙個空格,替換成「%20」,字串後面的字元往後移動3位。時間複雜度o(n2)。方法不好。

1:先找到字串(s1)中所有的空格數,這樣就能直到替換後字串的長度(s2),s2.length() = s1.length() + count*2;

2:從s1字串的末尾位字元開始判斷是否為空格,如果是,從後往前向s2字串中寫入「%20」,s2的下標先前移動三位,s1的下標向前移動一位;如果不是,將字元從s1複製到s2,下標都前移一位。

3:如果兩個下標相等,說明s1字串前面已經沒有空格了。直接將前面相同的字元複製即可。

class

solution

//s1這樣處理後會變短,所以不要處理形參

//計算將空格轉換成%20後字串長度

int counttrans = s.

length()

+ count*2-

1;//替換後長度

int counts = s.

length()

-1;char

transstring =

newchar

[counttrans+1]

;//while(counts <= counttrans && counts >1)

else

counts--;}

//將前面沒有空格的字串替複製到另乙個陣列

for(

int i=

0;i<=counttrans;i++)

string re =

newstring

(transstring)

;return re;

}}

時空複雜度都是:o(n);

如何確定字串中某個字元的個數:

1.可以利用for迴圈遍歷

public

class

lengthisincludespace

system.out.

println

(count2);}

}

2.其他方法:

利用map,鍵值與數值對應:鏈結

上面**中方案:注意會改變原字串,但是這個還可以統計子字串。子字串統計

如何獲取字串中某個指定下標的字元

string.

charat

(i);

區別於indexof()

public int indexof(int ch): 返回指定字元在字串中第一次出現處的索引,如果此字串中沒有這樣的字元,則返回 -1。

建立特定長度的陣列

char

str =

newchar[10

];

設定字串中特定下標位置的字元

需要利用stringbuilder構造字串,然後使用setcharat(index, char)即可。index:位置,char:想要替換的字元。最後使用tostring()在轉換成字元即可。string類中沒有直接方法能夠設定某個位置的字元。

如何轉換字元陣列和字串

字元陣列到字串:

string string =

newstring

(array)

;string string2 = string.

valueof

(array)

;

字串到字元陣列:

string msg =

"i am a good boy!"

;char

dest = msg.

tochararray()

;

class

solution

return res.

tostring()

;}}

利用stringbuild構造器。**解釋

劍指offer面試題 替換空格

題目 請實現乙個函式,把字串中的每個空格替換成 20 例如輸入 則輸出 解析 時間複雜度為o n 的解法。完整 及測試用例實現 cpp view plain copy include using namespace std include length 為字元陣列string的總容量 void re...

劍指 面試題5 替換空格

題目 請實現乙個函式,把字串 s 中的每個空格替換成 20 思路1 這裡leetcode上c 給出的是乙個string,直接使用string.replace 考慮到乙個字串中可能有多個空格,用string.find 找空格,如果未找到,則返回string.npos。如果是char陣列,可以考慮思路2...

替換空格(劍指offer面試題4)

分析 從頭到尾掃瞄字串,遇到空格就替換,導致後面的字元都要向後移,意味著總時間複雜度為o n 2 更好的辦法,從字串後面遍歷替換。先遍歷所有的空格,每多乙個空格,字串長度加2個,也就是說最後替換後的字串長度為原長度 2 空格數,設定兩個指標,指向原始字串末尾和新字串末尾,依次向前遍歷,原始字串指標遇...