字串迴圈移位演算法

2021-06-16 23:43:44 字數 782 閱讀 7925

打算好好學演算法,從模仿開始,我現在寫的演算法都是看了別人的原理然後自己實現的。積累實在太少,很多問題想不到最優的解決方案,不過以後會好起來的。

字串的迴圈移位(左移和右移原理一樣)原理:

如字串1234abcd,右移4位,實現如下

1234abcd→4321abcd→4321dcba→abcd234

即先反轉前4個字元,再反轉後4個,再全部反轉。

/**2013.7.23

***0423

function:字串迴圈移位

功能描述:

定義字串迴圈右移操作:把乙個長度為n的字串內的元素

迴圈右移k位,要求時間複雜度為o(n),空間複雜度為o(1),

輸入樣例:

n=8的字串abcdefgh;

輸出樣例:

k=4,即字元元素右移4位,得到efghabcd。**/

#include #include using namespace std;

void invertstring(string &strn, int start, int end)

}void rightshift(string &strn, int k)

int main(int argc, char *argv)

{ string strn;

int k= 0;

cout<<"input :\t( string, k)\n"<>strn>>k;

rightshift( strn, k);

cout<<"output :\n"

<

字串迴圈移位

把字串移動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 如下...