参考资料:
[1]参考剑指OFFER书上的思想
关键词:
这个情况要考虑一下。
string a;
if(n>str.size())//这种极情况返回空的字符串
return a;
思路:
先全部首尾对调,再分别各自对调
自己的解答:
class Solution {
public:
string LeftRotateString(string str, int n) {
if(str.empty())
return str;
string a;
if(n>str.size())//这种极情况返回空的字符串
return a;
//步骤1:首尾全部对调
Reverse(str,0,str.length()-1);
//步骤2:部分自己首尾对调
Reverse(str,0,str.length()-1-n);
Reverse(str,str.length()-n,str.length()-1);
return str;
}
void Reverse(string &str,int begin,int end)
{
while(begin<end)
{
swap(str[begin++],str[end--]);
}
}
};
//思路是啥呢?也不知道这个思路从哪来的
//先全部头尾对调,再各自头尾对调
//前面是size-n进行对调,后面是n个进行对调
标准答案:
class Solution {
public:
string LeftRotateString(string str, int n) {
//思想很重要:受翻转单词顺序的启发
//首先翻转前n个,在翻转后面的,然后进行全部翻转
string a;
if(n>str.size())//这种极情况返回空的字符串
return a;
Reverse(str,0,n-1);
Reverse(str,n,str.size()-1);
Reverse(str,0,str.size()-1);
return str;
}
void Reverse(string &str,int begin,int end)
{
while(begin<end)
{
swap(str[begin++],str[end--]);
}
}
};