如:輸入」i love you baby」,輸出:」i20%love%20you%20baby」
時間複雜度為o(n)解法,先遍歷一遍陣列計算出空格數量,由於替換乙個空格需要多增加2個位元組,所以替換後增加位元組數應該為:n=2*sum(space);然後使用兩個指標分別指向原來字串的末尾和替換後新字串的末尾。
移動p1,把字元逐個複製到p2位置,直到遇到空格,然後p1像前移動一格,p2拷貝」%20」.一次從復,直到p2等於p1表明所有空格均替換完。
#include
using namespace std;
void replacespace(char* str, int length)
int newlength = orignaloflength + numofspace * 2;
if (newlength > length)
return ;
int indexoforignal = orignaloflength;
int indexofnew = newlength;
while(indexoforignal >= 0 && indexofnew > indexoforignal)
else
str[indexofnew--] = str[indexoforignal];
indexoforignal--;
}}int main()
// 《劍指offer——名企面試官精講典型程式設計題》**
// 著作權歸原書作者所有,這裡只是貼出來學習學習。
#include
#include
/*length 為字元陣列string的總容量*/
void replaceblank(char
string, int length)
/*newlength 為把空格替換成'%20'之後的長度*/
int newlength = originallength + numberofblank * 2;
if(newlength > length)
return;
int indexoforiginal = originallength;
int indexofnew = newlength;
while(indexoforiginal >= 0 && indexofnew > indexoforiginal)
else
-- indexoforiginal;
}}void test(char* testname, char
string, int length, char expected)
// 空格在句子中間
void test1()
// 空格在句子開頭
void test2()
// 空格在句子末尾
void test3()
// 連續有兩個空格
void test4()
// 傳入null
void test5()
// 傳入內容為空的字串
void test6()
//傳入內容為乙個空格的字串
void test7()
// 傳入的字串沒有空格
void test8()
// 傳入的字串全是空格
void test9()
int main()
劍指Offer 替換字串中空格
另外一種較好的解法是從後往前替換,具體做法是從頭遍歷計算所有空格數,計算出總的長度。該解法的前提條件是若在源字串上替換就要求源字串有足夠的空間來容納新的字串。時間複雜度為o n 解決辦法一 利用replace函式 將str轉為字串後呼叫replace方法,將空格轉為 20 即可。需要注意的是repl...
字串替換空格
點 抽象問題簡化問題 題意 乙個字串,比如 aaa baea erwe dsa dsa f a 替換其中的空格字元為 20 劍指offer面試題4 思路 這個問題的點在於,如果正常從頭到尾替換的話,每乙個被替換空格,它後面的全部字串都需要做整體移動 所以要設法想出,怎麼能夠減少字串移動 非空格字元需...
替換空格(字串)
思路一 利用string類的replaceall方法 public class solution 思路二 將字串轉換為字元陣列 建立乙個新的stringbuffer的物件,遍歷字元陣列,將不為空格的字元直接存入 當遇到空格時,存入 20 public class solution return st...