把字串移動n位。可以乙個乙個移動,這樣的話,要移動n次,每次移動len個。演算法時間複雜度為o(n*len)。
也可以開闢乙個新的記憶體,把移動的最終位置計算出來,直接放到那裡即可,這樣時間負責度為o(1),空間複雜度為o(len)。
除此之外,還有時間負責度為o(1),空間負責度也為o(1)的演算法。
第一種方法為把右邊的向左移,每次移動n位。一直到末尾,再把末尾的反轉好
//字串左移n位
void shift(std::string &str, int n)
if (start == mark)
else if (end >= len)
end = mark;
}}
第二種方法是,先把前n個字串反轉,再把後面的反轉。最後再把整個字串反轉
//反轉[start end]之間字串
void inversion(std::string& str, int start, int end)
void shift2(std::string& str, int n)
str[(i + j*n) % len] = temp;
}}
測試:
int main()
字串迴圈移位
首先,先看看如何對數字進行迴圈移位 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 如下...
字串迴圈移位
請實現字串右迴圈移位函式,比如 abcdefgh 迴圈右移兩位就是 ghabcdef 實現字串迴圈移位可有多種方式 老實方法 乙個乙個的移位,每次迴圈,先把最後乙個儲存起來,然後從後面開始往後挪一位。如果移位k次,這個操作就進行k次迴圈 圖示內部移位一次流程 如下 void rightloopmov...