字串的左旋右旋問題

2021-10-06 23:26:17 字數 1556 閱讀 9811

字串的左旋右旋其實是乙個問題,下面只對右旋進行分析。

當乙個字串進行旋轉的時候,字串的大小會決定有效旋轉次數。這裡面的有效是指,後面的旋轉會與前面的旋轉相同,所以我們必須要對旋轉次數進行去重

如「aabb」

一次右旋:baab

二次右旋:bbaa

三次右旋:abba

四次右旋:aabb

五次右旋:baab 這裡就和第一次右旋一樣了,所以我們必須進行去重操作

如何去重呢?

用旋轉的次數模上字串長度即可。

count(次數) %= len(長度)

下面介紹幾種實現右旋的方法:

1.常規思路:字串右旋,這時字串會向右移動,此時我們先儲存,字串的最後乙個字元,將後乙個字元挨個等於前乙個字元,再將第乙個字元等於儲存的最後乙個字元。

**:

#include #include #include void rightrotate(char *arr,int len,int count);

int main()

void rightrotate(char *arr, int len, int count)

arr[i] = temp;//第乙個字元等於儲存的最後乙個字元

count--;

}}

2.字串逆置:

如這樣乙個字串,進行右旋3次。先進行兩次區域性逆置,分別從[0,len-count-1][len-count,len-1]。最後對字串進行整體逆置。

**:

#include #include #include void rightrotate(char *arr,int len,int count);

void reverse(char *arr, int start, int end);

int main()

void rightrotate(char *arr, int len, int count)

void reverse(char *arr, int start, int end)

strcpy(double_string, arr);//copy函式

strcat(double_string, arr);//字串連線

assign(arr, double_string, len, count);//將str2中合適的旋轉次數,賦予str1

printf("%s", arr);

return 0;

}void assign(char *arr, char *double_string, int len, int count)

}

上述,進行字串的右旋三種方法,第一種方法一般比較容易想到。

左旋問題也都可以用上述三種方法

字串左旋右旋問題

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

左旋右旋字串

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

劍指offer之字串左旋右旋問題

右旋 關於思路 1.右旋就是把字串的前幾個字元放到字串的後面,首先,可以根據要旋轉的數量,把字串分成兩部分。2.第一部分進行翻轉,第二部分進行翻轉。3.整體翻轉 例如 abcdefgh 若要翻轉前兩個,首先把字串分為 ab cdefgh 然後 翻轉ba hgfedc 最後整體翻轉得到cdefghab...