題目描述
給定一個字符串和一個偏移量,根據偏移量旋轉字符串(從左向右旋轉)
樣例
挑戰
在數組上原地旋轉,使用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]