彙編語言中有一種移位指令叫做循環左移(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;
}
};