據說一道微軟的面試題,要求考慮時間和空間的優化,下面給出幾種通常字串反轉的方法:
1 直接陣列操作
char
*strreverse (
char
*str )
return
str ; }
這種做法原來的str沒有儲存,原來的str也改變了
2 指標操作
char
*strreverse (
char
*str )
return
str ; }
上面倆中解法顯然沒有時間和空間的優化,記得上水木的時候看到反轉倆個數的方法,沒有引入任何的中間變數而且交換為為操作,速度更加的快,下面給出沒有引入中間變數的交換倆個數的方法
3 通過位異或運算交換倆個數
char
*strreverse (
char
*str )
return
str ; }
4 加減運算
char
*strreverse (
char
*str )
return
str ; }
但是這種方法有個致命的限制,就是char為乙個位元組,表示的範圍-128 - 127,*p += *q ;這個操作可能會引起益處的問題
上面倆種方法不僅沒有用到中間變數,而且位運算的速度有所提高, 達到一定程度的時間和空間優化
上次上csdn的時候也碰到這個題目,不過是按照函式原形 char * strreverse ( const char * str ) 寫個函式,遞迴的實現字元的反轉,下面也給出實現的幾種方法1,
char
*strreverse (
char
*str ){if
( *str =='
這種方法的效率很低,主要是每次遞迴都用strlen求字元的長度,strlen函式是相當耗時間的函式,而且引入了中間變數,這個方法不不可取的
字串反轉
include include include 方法一 將第乙個字元和最後乙個互換,第二個和倒數第二個互換,如此依次迴圈下去 char strrev1 const char str return tmp free tmp 方法二 不額外申請一片儲存字串的記憶體空間,通過中間變數來改變傳遞進來的字串裡...
字串反轉
解法一 第一次看到這題目,想到最簡單 最直覺的解法就是 遍歷字串,將第乙個字元和最後乙個交換,第二個和倒數第二個交換,依次迴圈,即可,於是有了第乙個解法 const char str return tmp 這裡是通過陣列的下標方式訪問字串的字元,實際上用指標直接操作即可。解法二正是基於此,實現 為 ...
反轉字串
問題 用o n 的演算法把 www.taobao.com 轉成 com.taobao.www 方法 用兩個棧 從左至右掃瞄字串,以點號為分隔符,每次掃瞄到點號的時候就把前面的字元壓棧到s1,然後再一直吧s1裡的東西彈棧到s2,一直彈到s1空為止 中間過程中弄幾個標記變數儲存陣列指標,最後把s2裡的東...