字串 旋轉字串 左旋或右旋k個字元

2021-08-04 23:58:59 字數 1156 閱讀 9993

問題描述

將n個字元的陣列,迴圈右移k位。時間複雜度o(n)。

比如原陣列序列為abcd1234,要求變換成的陣列序列為1234abcd,即迴圈右移了4位。

問題分析

方法1、暴力位移法,時間複雜度為o(m*n)

下面是左旋的方法,

void leftshift1(char *str,size_t len, size_t n)

str[len - 1] = tmp;

}}

方法2、指標翻轉法,時間複雜度為o(m+n)

就是以n個字元為單位,進行移動,當剩餘元素不夠k個元素時,1個1個進行移動。

void leftshift2(string &str, size_t n)

//末尾留有位置

int r = len - p2;

while (r--)

p1++;

p2++;

}}

方法3、時間複雜度為o(n)

(1)思路1、

就是將原陣列,分為兩個部分,分別將這兩個部分逆序,然後再將逆序後字串,再進行逆序

步驟:1.逆序排列 abcd: abcd1234 -> dcba1234;

2.逆序排列 1234: dcba1234-> dcba4321;

3.全部逆序 dcba4321->1234abcd。

//方法4、就是將字串分為兩個部分,分別逆序,然後再將整體逆序

void reversestr(char *str, int begin, int end)

void rightshift4(char *str,int len,int n)

(2)思路2:

方法簡單到爆,重新開闢同樣的空間大小,將原陣列中的內容,按旋轉之後的順序放置。

void rightshift3(string &str,size_t n)

str = temp;

}

左旋右旋字串

定義字串的左旋轉操作 把字串前面的若干個字元移動到字串的尾部。如把字串abcdef 左旋轉2 位得到字串cdefab。請實現字串左旋轉的函式。要求時間對長度為n 的字串操作的複雜度為o n 輔助記憶體為o 1 分析 如果不考慮時間和空間複雜度的限制,最簡單的方法莫過於把這道題看成是把字串分成前後兩部...

字串左旋右旋問題

如把字串abcdef 左旋轉2 位得到字串cdefab。要求時間對長度為n 的字串操作的複雜度為o n 輔助記憶體為o 1 分析 如果不考慮時間和空間複雜度的限制,最簡單的方法莫過於把這道題看成是把字串分成前後兩部分,通過旋轉操作把這兩個部分交換位置。於是我們可以新開闢一塊長度為n 1 的輔助空間,...

左旋轉字串(字串)

題目描述 組合語言中有一種移位指令叫做迴圈左移 rol 現在有個簡單的任務,就是用字串模擬這個指令的運算結果。對於乙個給定的字串行s,請你把其迴圈左移k位後的序列輸出。例如,字串行s abcxyzdef 要求輸出迴圈左移3位後的結果,即 xyzdefabc 是不是很簡單?ok,搞定它!思路一 pub...