题目:
字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。请定义一个函数实现字符串左旋转操作的功能。比如,输入字符串"abcdefg"
和数字2
,该函数将返回左旋转两位得到的结果"cdefgab"
。
输入: s = "abcdefg", k = 2
输出: "cdefgab"
解析:
方法一: 利用数学取余的思维求解,直接看代码,简单易懂。
方法二: 先局部逆置,再整体逆置。
方法三: 使用工具直接截取(有点投机取巧,不适合面试回答)。
参考答案:
class Solution{
//方法一
string reverseLeftWords(string s, int n){
//方法一
if(n > s.size()){
return s;
}
string ansStr;
int j;
for(int i = 0; i < s.size(); ++i){
j = i + n;
ansStr += s[j % s.size()];
}
return ansStr;
}
//方法二
void moveStr(string& s, int start, int end){
while(start < end){
char temp = s[start];
s[start] = s[end];
s[end] = temp;
start++;
end--;
}
}
string reverseLeftWords(string s, int n){
if(s.empty() || n < 0){
return s;
}
int res = n % s.size();
moveStr(s, 0, res - 1);
moveStr(s, res, str.size()-1);
moveStr(s, 0, str.size()-1);
return s;
}
//方法三
string reverseLeftWords(string s, int n){
if(n > s.size()){
return s;
}
return (s+s).substr(n, s.size());
}
};