讀書筆記 字串迴圈移位

2021-06-05 13:37:18 字數 1009 閱讀 5832

問題描述:將乙個字串例如abcd123向左旋轉移位4位變為123abcd;或者右移4位變為d1234abc;要求寫乙個函式實現對該字串的這兩種操作。

方法一:最容易想到的方法當然是(以左移為例)一次移動一位,一共移動四次,這樣便可以將上述字串左移4位。

abcd123-->bcd123a-->cd123ab-->d123abc-->123abcd

leftshift(int* arr, int n, int k) //arr為字串,n為字串的長度,k為左移的長度 }

方法二:

abcd123左移4位:

分成兩部分:abcd 123

左部翻**    dcba 123

右部翻**    dcba 321

整體翻**    123 abcd

abcd123右移4位:

分成兩部分: abc d123

左部翻**    cba d123

右部翻**    cba 321d

整體翻**    d123 abc

演算法描述:

由上可知,當乙個有m個字元的字串要左移n位時,要將其分成左右兩部分,分別有n和m-n個字元;

當乙個有m個字元的字串要右移n位時,要將其分成左右兩部分,分別有m-n和n個字元;

然後對上面分割之後的兩部分分別翻轉形成新的字串,最後再將得到的新字串翻轉就得到了我們需要的字串

具體的實現**為:

#include "stdafx.h"

#include

#include

void subrotate(char *start, char *end)  

else

subrotate(xfirst,xend);  

subrotate(yfirst,yend);  

subrotate(zfirst,zend);  

}  

}  

int main(void)  

讀《程式設計師程式設計藝術》筆記

字串迴圈移位

把字串移動n位。可以乙個乙個移動,這樣的話,要移動n次,每次移動len個。演算法時間複雜度為o n len 也可以開闢乙個新的記憶體,把移動的最終位置計算出來,直接放到那裡即可,這樣時間負責度為o 1 空間複雜度為o len 除此之外,還有時間負責度為o 1 空間負責度也為o 1 的演算法。第一種方...

字串迴圈移位

首先,先看看如何對數字進行迴圈移位 c語言中沒有提供迴圈移位的操作符,但可以通過簡潔的方式實現迴圈移位,主要使用移位操作來實現。設乙個運算元x有s位則迴圈左移n位的操作為 x n x s n 同理右移n位位 x n x s n 實際程式設計中可以用巨集定義實現迴圈移位 define rotate l...

字串迴圈移位

問題描述 給定乙個字串,把字串前k個字元移動到尾部。例 字串 abcdefg 左移3為變成 defgabc 解決思路 引入矩陣中 a b ba的思想 a 為a的轉置矩陣 比如 abc cba,defg gfed,cbagfed defgabc。這樣的演算法時間複雜度是o n 空間複雜度是o 1 如下...