1. 程式人生 > >LintCode 8.旋轉字串 C++

LintCode 8.旋轉字串 C++

問題描述:給定一個字串和一個偏移量,根據偏移量旋轉字串(從左向右旋轉)

樣例:對於字串 "abcdefg".

offset=0 => "abcdefg"
offset=1 => "gabcdef"
offset=2 => "fgabcde"
offset=3 => "efgabcd"

分析:好了,我將開始我的表演。首先獲取字串str的長度len,然後如果長度為0或或旋轉量offset0,不做任何操作,直接返回;如果旋轉量超出了str的長度len,那麼對offset取餘(這點剛開始我沒有考慮到,報錯了才發現)。然後定義一個臨時的串tem用來放尾部要被旋轉到頭部的字元,接下來就明朗了,先迴圈給

tem賦值,然後不用旋轉的字元迴圈後移,最後將tem中的字元倒出,這樣就OK了。

class Solution {
public:
    /*
     * @param str: An array of char
     * @param offset: An integer
     * @return: nothing
     */
    void rotateString(string &str, int offset) {
        // write your code here
        int len = str.length();
        if(offset == 0 || len == 0){
            return;
        }else if(offset > len){
            offset = offset % len;
        }
        string tem;
        for(int i = 0;i < offset;i++){
            tem[i] = str[len - 1 - i];
        }
        for(int i = len - offset - 1;i >= 0;i--){
            str[i + offset] = str[i];
        }
        for(int i = 0;i < offset;i++){
            str[i] = tem[offset - 1 - i];
        }
    }
};
好了,如有錯誤,歡迎指出!