《劍指offer》:[42-1]左旋轉字串
題目二:字串的左旋轉操作是把字串前面的若干個字元轉移到字串尾部。請定義一個函式實現字串左旋轉功能。
比如輸入字串"youareonly"和數字6,該函式將返回"onlyyouare"。
由於有了面試【42】的經驗和思路,我們可以這樣來解決該問題。用三次翻轉:第一步:把整個字串分為兩個部分,前N個要移動的字元和剩下的字元,先翻轉前N個字元;"erauoyonly";
第二步:再翻轉後面剩下的字元:"erauoyylno";
第二步:最後在翻轉整個字元:"onlyyouare";
具體分析圖如下:
具體實現程式碼:
#include <iostream>
using namespace std;
char str[]="youareonly";
void Reverse(char *pBegin,char *pEnd)
{
if(NULL==pBegin || NULL==pEnd)
return;
while(pBegin<pEnd)
{
char temp=*pEnd;
*pEnd=*pBegin;
*pBegin=temp;
pBegin++;
pEnd--;
}
}
void LeftMove(char *strr,int num)
{
int length=static_cast<int>(strlen(strr));
if(NULL==strr || num>=length)
return;
if(num<length && num>0 && length>0)
{
char *FirstStart=strr;
char *FirstEnd=strr+num-1;
char *SecondStart=strr+num;
char *SecondEnd=strr+length-1;
//第一步:翻轉第一部分,要左旋轉的幾個字元(個人覺得左旋的定義有問題,不過理解就好);
Reverse(FirstStart,FirstEnd);
//第二步:翻轉第二部分,翻轉剩下的字串;
Reverse(SecondStart,SecondEnd);
//第三步:翻轉整個字串;
Reverse(FirstStart,SecondEnd);
}
}
int main()
{
char *result=NULL;
cout<<"翻轉前字串:"<<str<<endl;
LeftMove(str,6);
cout<<"反轉後字串:"<<str<<endl;
system("pause");
return 0;
}
執行結果:
相關文章
- 【劍指offer】左旋轉字串字串
- 劍指offer—58_2.左旋轉字串—分析及程式碼(Java)字串Java
- 【劍指offer】字串轉整數字串
- 【劍指offer】字串的排列字串
- 《劍指offer》:[49]把字串轉化成整數字串
- 【劍指offer】【2】字串的空格字串
- 【劍指offer】字串的組合字串
- 劍指 Offer 38. 字串的排列字串
- 劍指Offer 表示數值的字串字串
- 劍指offer(Java版)--將字串轉換為整數Java字串
- 劍指offer——把字串轉換成整數C++字串C++
- 劍指offer-字串空格替換為“ ”字串
- 《劍指offer》:[54]表示數值的字串字串
- 【劍指offer】替換字串中的空格字串
- 劍指Offer系列之「表示數值的字串」字串
- 力扣 - 劍指 Offer 67. 把字串轉換成整數力扣字串
- 《Leetcode of December》劍指 Offer 67. 把字串轉換成整數LeetCode字串
- [劍指offer][第四章][28]字串的排列字串
- 劍指offer面試16 反轉連結串列面試
- 劍指offer-JavaScript版JavaScript
- 劍指Offer題解合集
- 每日一練(32):左旋轉字串字串
- 劍指offer:旋轉陣列的最小數字陣列
- 劍指offer 旋轉陣列的最小數字陣列
- 【劍指offer】旋轉陣列的最小值陣列
- 劍指 Offer 48. 最長不含重複字元的子字串字元字串
- 【劍指offer】刪除在另一個字串中出現的字元字串字元
- 劍指 offer(1) -- 陣列篇陣列
- Leetcode劍指offer(八)LeetCode
- 劍指offer刷題記錄
- 劍指offer-轉陣列的最小數字-php陣列PHP
- 《劍指 Offer》棧實現佇列佇列
- 劍指offer解析-下(Java實現)Java
- 劍指offer解析-上(Java實現)Java
- 劍指offer——重建二叉樹二叉樹
- 【劍指offer】樹的子結構
- 【劍指offer】二叉樹深度二叉樹
- 【劍指offer】員工年齡排序排序