參考資料:
[1]參考劍指OFFER書(shū)上的思想
關(guān)鍵詞:
這個(gè)情況要考慮一下。
string a;
if(n>str.size())//這種極情況返回空的字符串
return a;
思路:
先全部首尾對(duì)調(diào)蒸苇,再分別各自對(duì)調(diào)
自己的解答:
class Solution {
public:
string LeftRotateString(string str, int n) {
if(str.empty())
return str;
string a;
if(n>str.size())//這種極情況返回空的字符串
return a;
//步驟1:首尾全部對(duì)調(diào)
Reverse(str,0,str.length()-1);
//步驟2:部分自己首尾對(duì)調(diào)
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--]);
}
}
};
//思路是啥呢明未?也不知道這個(gè)思路從哪來(lái)的
//先全部頭尾對(duì)調(diào)钧唐,再各自頭尾對(duì)調(diào)
//前面是size-n進(jìn)行對(duì)調(diào)轩触,后面是n個(gè)進(jìn)行對(duì)調(diào)
標(biāo)準(zhǔn)答案:
class Solution {
public:
string LeftRotateString(string str, int n) {
//思想很重要:受翻轉(zhuǎn)單詞順序的啟發(fā)
//首先翻轉(zhuǎn)前n個(gè)寞酿,在翻轉(zhuǎn)后面的,然后進(jìn)行全部翻轉(zhuǎ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--]);
}
}
};