實現乙個函式,可以左旋字串中的k個字元。
abcd左旋乙個字元得到bcda
abcd左旋兩個字元得到cdab
一看到這題,我想:真簡單!直接再建立乙個新的字元陣列;把原字串左旋後放進去,再複製回去不就搞定了嗎?
於是我馬上開動寫完了**。......卻有種意猶未盡之感:能不能不建立新的陣列(字串)就把字串進行左旋操作呢?
想了想,我靈機一動:我先寫乙個只左旋一位的函式;左旋多少位我就呼叫多少次這個函式,這樣問題不就會變得很簡單了嗎?
寫完以後我再三考慮,不得不承認:對於這樣乙個小目的來說,這樣寫**實在是可以說是「大費周章了」;於是我想能不能用一種巧妙的演算法,能夠一次性解決;剛剛產生這個想法,我就預見到:這個演算法一定很精妙,很容易在邊緣判定上出錯;思索(在紙上畫)了一會,我想出了一種」跟隨」演算法:從第乙個元素開始,用乙個變數儲存它的值,把這個元素賦值為左旋後的值,對這個值對應的元素進行相同的操作直到這個變數儲存過所有的值;左旋也就完成了。(表述起來挺麻煩,希望你能看懂)
剛剛寫完這第三種方法,我又意識到它最大的缺陷:程式可讀性太差了!
我自己都有點暈@_@
於是我就在想能不能有一種可讀性強,效率高,同時不費腦子的解法呢?
於是乎,我想到了利用翻轉與旋轉的聯絡來做:
字串:abcdef
全部翻**fedcba
左4翻**cdef ba
右部分翻**cdef ab
成功完成了左旋!
於是最後的**附上:
#include void reverse_arr(char *left,char *right)
}void spin_arr(char a, int len, int k)
int main()
左旋字串
1.問題描述 字串的左旋操作是把字串前面的若干個字元轉移到字串的尾部。請定義乙個函式實現字串左旋轉操作的功能。比如輸入字串 abcdefg 和數字2,該函式將返回左旋轉2位得到的結果 cdefgab 來自 劍指offer 2.分析 其實和翻轉單詞順序差不多,我們可以先將前面2位翻轉得到 ba,在將後...
左旋字串
定義字串左旋轉操作 把字串前面的若干個字元移動到字串尾部,如把字串 abcdef 左旋轉 2位得到字串 cdefab 請實現字串左旋轉的函式,要求對長度為 n 的字串操作的時間複雜度為 o n 空間複雜度為 o 1 author administrator public class leftshif...
左旋字串
題目要求 實現乙個函式,可以左旋字串中的k個字元。右旋字串同理 例如 abcde左旋兩個字串得到cdeab 如下 編譯環境為vs2013 define crt secure no warnings 1 include include include include 三步翻轉法 void revers...