題目:定義字串的左旋轉操作:把字串前面的若干個字元移動到字串的尾部。如把字串abcdef左旋轉2位得到字串cdefab。請實現字串左旋轉的函式。要求時間對長度為n的字串操作的複雜度為o(n),輔助記憶體為o(1)。
分析:如果不考慮時間和空間複雜度的限制,最簡單的方法莫過於把這道題看成是把字串分成前後兩部分,通過旋轉操作把這兩個部分交換位置。於是我們可以新開闢一塊長度為n+1的輔助空間,把原字串後半部分拷貝到新空間的前半部分,在把原字串的前半部分拷貝到新空間的後半部分。不難看出,這種思路的時間複雜度是o(n),需要的輔助空間也是o(n)。
本文提出的方法是:把字串看成有兩段組成的,記位xy。左旋轉相當於要把字串xy變成yx。我們先在字串上定義一種翻轉的操作,就是翻轉字串中字元的先後順序。把x翻轉後記為xt
。顯然有(xt)t=x。
我們首先對x和y兩段分別進行翻轉操作,這樣就能得到xtyt
。接著再對xtyt
進行翻轉操作,得到(xtyt)t=(yt)t(xt)t=yx。正好是我們期待的結果。
分析到這裡我們再回到原來的題目。我們要做的僅僅是把字串分成兩段,第一段為前面m個字元,其餘的字元分到第二段。再定義乙個翻轉字串的函式,按照前面的步驟翻轉三次就行了。時間複雜度和空間複雜度都合乎要求。
參考**如下:
public class rotate }
public static void leftrotate(char test, int number)
public static void main(string args) ;
int number = 4;
leftrotate(test, number);
}}
**:
左旋轉字串
題目 定義字串的左旋轉操作 把字串前面的若干個字元移動到字串的尾部。如把字串abcdef左旋轉2位得到字串cdefab。請實現字串左旋轉的函式。要求時間對長度為n的字串操作的複雜度為o n 輔助記憶體為o 1 思想 旋轉三次 include include using namespace std v...
左旋轉字串
package com.string 旋轉字串 q 26 左旋轉字串 題目 定義字串的左旋轉操作 把字串前面的若干個字元移動到字串的尾部。如把字串abcdef左旋轉2位得到字串cdefab。請實現字串左旋轉的函式。要求時間對長度為n的字串操作的複雜度為o n 輔助記憶體為o 1 public cla...
左旋轉字串
如abc,左旋1得到bca,左旋2得到cab o n k 的演算法 include using namespace std include include include include include include include include include include int main...