左旋轉字符串

 

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

分析:

方法(1):先截取剩下的字符串,再將要移動的接在後面。如S=”abcXYZdef”,K=3,先拿到截取到XYZdef,再將abc拼接在後面就是XYZdefabc

 string LeftRotateString(string str, int n) {
        //對字符串左移k位
        int len=str.size();
        string ret;
        if(len<=0 || n<0)
            return ret;
        
        ret=str.substr(n, len-n);//拿到剩下的字符串
        for(int i=0;i<n;i++)//將要移動的拼接在剩下的字符串後面
        {
            ret+=str[i];
        }
        
        return ret;
    }

方法(2):先將原字符串尾加一份在自己後面,然後從要移動的位數起截取與原字符串相同的長度(先對要移動的位數取餘)。如S=”abcXYZdef”,S+=S就是abcXYZdefabcXYZdef,從K=3開始截取字符串len個長度後就是XYZdefabc

string LeftRotateString(string str, int n) {
        //對字符串左移n位
     
        int len=str.size();
        string ret;
        
        if(len<=0 || n<0)
            return ret;
        
        int n1=n%len;
        
        str+=str;
        ret=str.substr(n1, len);
        return ret;            
    }     

方法(3):整體反轉字符串+局部反轉字符串。如S=”abcXYZdef”,K=3,先整體反轉字符串後爲fedZYXcba,再將前三個局部反轉,剩下的局部反轉就是XYZdefabc

string LeftRotateString(string str, int n) {
        //對字符串左移n位
        
        reverse(str.begin(), str.end());
        reverse(str.begin(), str.begin()+(str.size()-n));
        reverse(str.begin()+(str.size()-n), str.end());
        
        return str;
    }

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章