方法一
最容易想到的应该是这个方法了,定义一个新的字符串,再用两个for循环,问题是这个方法效率并不高。
class Solution {
public:
string reverseLeftWords(string s, int n) {
string r;
for(int i=n;i<s.length();i++){
r.push_back(s.at(i));
}
for(int i=0;i<n;i++){
r.push_back(s.at(i));
}
return r;
}
};
方法二:字符串切片
看到一个很秀的做法,问题在于内存消耗还是比较多的。
class Solution {
public:
string reverseLeftWords(string s, int n) {
return (s+s).substr(n,s.size());
}
};
与这个做法是差不多的:
class Solution {
public:
string reverseLeftWords(string s, int n) {
return s.substr(n,s.size())+s.substr(0,n);
}
};
方法三:三次翻转
class Solution {
public:
string reverseLeftWords(string s, int n) {
reverse(s.begin(), s.begin()+n);
reverse(s.begin()+n, s.end());
reverse(s.begin(), s.end());
return s;
}
};