原地操作法
可以先将字符串的前半部分逆置,再将后半部分逆置,最后再整体逆置,就能实现字符串左旋。此方法占用资源最少。
class Solution {
public:
string reverseLeftWords(string s, int n) {
rever(s,0,n-1);
rever(s,n,s.size()-1);
rever(s,0,s.size()-1);
return s;
}
void rever(string& s, int begin, int end){
char temp;
while(begin<end){
temp = s[begin];
s[begin] =s[end];
s[end]=temp;
begin++;
end--;
}
}
};
解法二
子串切片
class Solution {
public:
string reverseLeftWords(string s, int n) {
return s.substr(n)+s.substr(0,n);
//substr(0,n)从0位开始的n个数,substr(n)从第n位开始到最后
}
};
解法三
数据流切片。性能比较差。
//数据流
class Solution {
public:
string reverseLeftWords(string s, int n) {
s.insert(n,1,' ');
istringstream istr(s);
string s1,s2;
istr>>s1>>s2;
return s2+s1;
}
};