文字列の左回転操作は、文字列の前のいくつかの文字を文字列の最後に転送することです。弦の左回転動作を実現する関数を定義してください。たとえば、文字列「abcdefg」と数値2を入力すると、関数は結果「cdefgab」を返します。これは、2ビット左に回転します。
例1:
输入: s = "abcdefg", k = 2
输出: "cdefgab"
例2:
输入: s = "lrloseumgh", k = 6
输出: "umghlrlose"
制限:
1 <= k <s.length <= 10000
問題解決のアイデア:
C ++の実装。ブロック交換の問題: "abcdefg";最初に最初の2つを交換: "bacdefg";次に残りを交換: "bagfedc";最後に全体的な交換: "cdefgab"。
class Solution {
public:
string reverseLeftWords(string s, int n) {
int len = s.size();
for(int i = 0; i < n / 2; i++){
//0到k-1的块 交换
swap(s[i], s[n -i - 1]);
}
for(int i = n; i < (len + n) / 2; i++){
//k到len的块 交换顺序
swap(s[i], s[len - (i - n) - 1]);
}
for(int i = 0; i < len / 2; i++)//全部再一次交换
swap(s[i], s[len - i -1]);
return s;
}
};