8、旋轉字串
阿新 • • 發佈:2018-11-11
題目描述
給定一個字串和一個偏移量,根據偏移量旋轉字串(從左向右旋轉)
樣例
挑戰
在陣列上原地旋轉,使用O(1)的額外空間
程式碼實現:
class Solution { public: void rotateString(string &str, int offset) { // write your code here if(str.size()==0) { return; } int num = offset % str.size(); //此步驟避免重複旋轉,只需要旋轉有效步 for(int i = 0;i<num;i++) { char b = str[str.size()-1]; //使用o(1)空間儲存最後一個元素 for(int j = str.size()-1;j>0;j--) { str[j]=str[j-1]; } str[0] = b; //將最後一個元素賦值給第一個 } } };
程式碼分析:
對於測試用例:
"abcdefg"
3
- 當offset的值大於字串的長度時,其旋轉操作可以簡化,例如:
offset = 8 對應的處理結果 "gabcdef"
offset = 1 對應的處理結果 "gabcdef"
兩者一樣,故可以 使 offset除以 字串長度(str.size())進行取餘(%)操作 ,這樣就可以省去沒有必要的重複計算。
- 要求使用O(1)的額外空間
故設計兩層迴圈,在第二層迴圈之前,開闢O(1)空間用來儲存字串中的最後一位元素,用來迴圈後賦值給首位 str[0]