劍指offer----左旋轉字符串

彙編語言中有一種移位指令叫做循環左移(ROL),現在有個簡單的任務,就是用字符串模擬這個指令的運算結果。對於一個給定的字符序列S,請你把其循環左移K位後的序列輸出。例如,字符序列S=”abcXYZdef”,要求輸出循環左移3位後的結果,即“XYZdefabc”。是不是很簡單?OK,搞定它!

class Solution {
//步驟1:以n爲界,將字符串分爲兩個子串
//步驟2:對兩個子串分別進行翻轉(調用兩次翻轉函數)
//步驟3:翻轉整個字符串(調用1次翻轉函數)
public:
    
    //實現翻轉功能
    void Reverse(int begin, int end, string &str){
        char temp;
        while(begin < end){
            temp = str[begin];
            str[begin] = str[end];
            str[end] = temp;
            begin ++;
            end --;
        }
    }
    
    string LeftRotateString(string str, int n) {
        // 定義字符串的長度len
        int len = str.length();
        //當字符串爲空或者指定翻轉的長度爲0時直接返回原字符串
        if(len < 1 || n == 0)
            return str;
        // 定義引用temp,它是變量str的引用,即別名
        // temp與str實際上是一回事,表示的是同一塊內存
        string &temp = str;
        //翻轉前面n個字符
        Reverse(0, n-1, temp);
        //翻轉後面的字符
        Reverse(n, len-1, temp);
        //翻轉整個字符串
        Reverse(0, len-1, temp);
        //返回新的字符串
        return str;
    }
};

發佈了70 篇原創文章 · 獲贊 23 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章