ソードフィンガーオファー58-II。左回転ストリング(C ++)ブロック交換の問題

文字列の左回転操作は、文字列の前のいくつかの文字を文字列の最後に転送することです。弦の左回転動作を実現する関数を定義してください。たとえば、文字列「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;
    }
};

ここに画像の説明を挿入します

おすすめ

転載: blog.csdn.net/qq_30457077/article/details/114848220