題目:
定義字串的左旋轉操作:把字串前面的若干個字元移動到字串的尾部。
如把字串abcdef左旋轉2位得到字串cdefab。請實現字串左旋轉的函式。
要求時間對長度為n的字串操作的複雜度為o(n),輔助記憶體為o(1)。
演算法思路:
把字串看做由兩段組成,記作xy,題目的意思是要求出yx。
記r(x)為x字串旋轉後的字串,則r(r(x))=x,於是有r(yx)=r(r(x)r(y))=yx
所以我們只需要把字串分為兩段,分別求出兩段字串的旋轉字串,然後再對含有包含兩段旋轉後的字串的字串進行旋轉就能得到結果了。
演算法偽**如下:
leftrotatestr(char *str, unsigned int k)
split str to two part
//one part is 0-k-1,another is k-n-1
reverse two part of the str
reverse the str with two reversed part
c++實現
char * leftrotatestr(char *str, unsigned int k)
return str;
}
演算法 左旋轉字串
對於乙個給定的字串行 s,把其迴圈左移 n 位後的序列輸出。例如字串行 s abcdef 輸出迴圈左移3位後的結果,即 defabc 字串 s 為abcdef,n 3,設x abc,y def,原字串可以表示成xy。此時用t表示翻轉,x的翻轉為xt,即xt cba,同理yt fed,那麼yx xty...
演算法題 左旋轉字串
題目描述 組合語言中有一種移位指令叫做迴圈左移 rol 現在有個簡單的任務,就是用字串模擬這個指令的運算結果。對於乙個給定的字串行s,請你把其迴圈左移k位後的序列輸出。例如,字串行s abcxyzdef 要求輸出迴圈左移3位後的結果,即 xyzdefabc 是不是很簡單?ok,搞定它!分析 迴圈左移...
演算法題解 左旋轉字串
組合語言中有一種移位指令叫做迴圈左移 rol 現在有個簡單的任務,就是用字串模擬這個指令的運算結果。對於乙個給定的字串行s,請你把其迴圈左移k位後的序列輸出。例如,字串行s abcxyzdef 要求輸出迴圈左移3位後的結果,即 xyzdefabc 是不是很簡單?ok,搞定它!public class...