打算好好學演算法,從模仿開始,我現在寫的演算法都是看了別人的原理然後自己實現的。積累實在太少,很多問題想不到最優的解決方案,不過以後會好起來的。
字串的迴圈移位(左移和右移原理一樣)原理:
如字串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 如下...