一、前言
字符串的逆序輸出是一道經典面試題,要實現並不難,但是面試官希望看到的是面試者能否運用最簡短的代碼更高效的實現字符串的逆序功能。換句話說,就是做到三點:時間復雜度、空間復雜度、代碼可讀性。不管任何代碼做到了這三點才算是好的代碼。 那接下來我將介紹兩種實現字符串逆序的方法,具體見下文。
二、實現字符串的逆序輸出
方法一:異或法
這種方法是一種比較精簡的方法,直接使用二進制來運算,更多的不說,看到代碼大家就明白了。
char *reverse_str(char *str)
{
size_t len = 0;
unsigned int i, j;
len = strlen(str);
for(i=0,j=len-1; i方法二:折半對調法
折半對調法是我自己取的名,可能不是太准確勿怪。原理就是定義一個中間變量從頭尾開始依次交換直到走到字符串中間一個字符。char *reverse_str(char *str)
{
size_t len = 0;
unsigned int i;
char temp;
len = strlen(str);
for(i=0; i
或者定義兩個變量i ,jchar *reverse_str(char *str)
{
size_t len = 0;
unsigned int i, j;
char temp;
len = strlen(str);
for(i=0, j=len-1; i
總結:無論是異或法和折半對調法,這兩種方法的時間復雜度和空間復雜度都很小。到目前為止是本人認為兩種比較可行的方法,如果大家有什麼更好的方法,歡迎分享交流。
網上也有很多其他的方法,像開辟新空間等方法這裡就不做介紹了,本人認為在代碼中如果可以做到不去申請新內存那就最好不要去做,一個變量可能覺得沒什麼但是積少成多,尤其是在嵌入式設備中,內存是很寶貴的,所以不建議這麼做。