題目:
定義字串的左旋轉操作:把字串前面的若干個字元移動到字串的尾部。
例如把字串"abcdef" 左旋2位 得到字串「cdefab"。請實現字串左旋轉的函式。
要求時間對長度n的字串操作的複雜度位o(n),輔助記憶體為o(1).
分析:這題的難點是輔助記憶體只能只用o(1),相當於只能進行字串中字元的替換操作,如果需要移動字串,則需要mn次替換操作,這樣複雜度也上來了,o(nn).
只能想技巧了。
實現如下:
#include
#include
using
namespace std;
void
reverse
(char
* str,
int i,
int j)
}void
leftrotate
(char
* srcstr,
int k)
intmain()
輸出結果如下:
string: abcdef
rotate string, 2: cdefab
微軟面試100題 左旋字串
定義字串的左旋操作 將字串前面的若干個字元移動到字串的尾部 如 abcde 左旋2位 cdeab 思路 ab ba cde edc baedc cdeab 分3部分反轉 public static void leftstr 1 stringbuilder str,int k private stat...
左旋字串演算法
原題來自 programming pearls 記錄在此作為讀書筆記。指定長度為n個字元的字串,實現將其左旋i位的演算法。如abcdefgh左旋3位為defghabc。記原字串為s,將其分為兩個子串,s a b。記len x 表示為字串x的長度。其中a的長度為i,b的長度為len s i。定義 為字...
微軟演算法100題26 左旋轉字串
26.左旋轉字串 題目 定義字串的左旋轉操作 把字串前面的若干個字元移動到字串的尾部。如把字串abcdef 左旋轉2 位得到字串cdefab。請實現字串左旋轉的函式。要求時間對長度為n 的字串操作的複雜度為o n 輔助記憶體為o 1 思路 先反轉整個字串 fedcba 在分別反轉各個子字串 fedc...