劍指offer筆記 面試題5 替換空格

2021-10-25 20:25:52 字數 2203 閱讀 4322

**:

#include

/** * 把字串中的空格元素替換成"%20"

* 時間複雜度為o(n^2),不足以拿到offer

* @param str 字串指標

* @param length 字串長度

*/void

replaceblanck1

(char

*str,

int length)

str[length+1]

='\0'

; str[i]

='%'

; str[i+1]

='2'

; str[i+2]

='0'

; length +=2

; i +=2

;// 這裡i+=2,之後還有乙個i+=1,所以執行完這次迴圈i+=3}}

}else

std::cout <<

"the string pointer is null"

<< std::endl;

}/**

* 把字串中的空格元素替換成"%20"

* 時間複雜度為o(n)

* @param str 字串指標

* @param length 字串長度

*/void

replaceblanck2

(char

*str,

int length)

length +

= count *2;

str[length-1]

='\0'

;int i,j;

for(i = length-count*2-

2, j = length-

2; i >=

0; i--

, j--

)else

str[j]

= str[i];}

}else

std::cout <<

"the string pointer is null"

<< std::endl;

}int

main()

std::cout << str1 << std::endl;

// replaceblanck1(str1, sizeof(str1) / sizeof(char));

replaceblanck2

(str1,

sizeof

(str1)

/sizeof

(char))

;// 注意c/c++中字串以'\0'作為結尾,因此長度比定義的元素的個數多1個

std::cout << str1 << std::endl;

return0;

}

問題描述:有兩個排序的陣列a1和a2,內存在a1的末尾有足夠多的空餘空間容納a2.請實現乙個函式,把a2中的所有數字插入a1中,並且所有的數字是排序的

**:

#include

/** * 兩個排好序的陣列a1、a2,將a2元素插入a1,且a1保持有序

* @param length1 陣列a1元素個數

* @param length2 陣列a2元素個數

*/void

insert

(int

*a1,

int length1,

int*a2,

int length2)

}int

main()

;int a2=

;for

(int i =

0; i <

10; i++

) std::cout << a1[i]

<<

'\t'

; std::cout << std::endl;

insert

(a1,

5, a2,4)

;for

(int i =

0; i <

10; i++

) std::cout << a1[i]

<<

'\t'

; std::cout << std::endl;

return0;

}

劍指Offer 面試題5替換空格

note 劍指offer的題可以在牛客網上做題驗證思路的正確性 思路 因為stringbuffer本身是可變字串序列,可以修改,實際上它的可變是犧牲空間換取的。替換可能導致超出其容量,char陣列的複製和新建。public string replacespace stringbuffer str s...

劍指offer 面試題5 替換空格

拿到這個題時,第乙個要考慮的就是記憶體夠不夠的問題。因為原來空格是乙個字元,現在要將乙個空格替換為三個字元,記憶體會變大。現在假設是在記憶體足夠的情況下修改。過程如下 完成乙個空格的替換 完成替換 測試用例的考慮 如下 void changestr char arr,int sz int i 0 i...

劍指offer面試題5 替換空格

面試題5 替換空格 思路一 新建乙個足夠的大小的字串空間,然後依次將字元拷貝,遇到空格進行三個字元的填充,接著重複執行前面的操作將整個字串替換完畢。時間複雜度o n 空間複雜度o n 思路二 從頭到尾掃瞄字串,每次遇到空格將後續字元向後移動兩個位置,然後進行填充。時間複雜度o n 2 思路三 從尾部...