標籤:blog io ar os sp on 資料 2014 art
題目1362:左旋轉字串(Move!Move!!Move!!!)時間限制:2 秒記憶體限制:32 兆特殊判題:否提交:1577解決:669題目描述:組合語言中有一種移位指令叫做迴圈左移(ROL),現在有個簡單的任務,就是用字串類比這個指令的運算結果。對於一個給定的字元序列S,請你把其迴圈左移K位後的序列輸出。例如,字元序列S=”abcXYZdef”,要求輸出迴圈左移3位後的結果,即“XYZdefabc”。是不是很簡單?OK,搞定它!輸入:多組測試資料,每個測試資料包含一個字元序列S和非負整數K。其中S的長度不超過1000。輸出:對應每個測試案例,輸出新序列。範例輸入:UDBOJ 4abba 1範例輸出:JUDBObbaa
輸入的k可能大於字串長度,故做取餘操作。
#include <iostream>#include<stdio.h>#include<string.h>using namespace std;void reverseStr(char* begin,char*end){ if(begin==NULL||end==NULL){ return; } while(begin<end){ swap(*begin,*end); begin++; end--; }}char* leftRotateString(char* pData,int n){ if(pData!=NULL){ int length =strlen(pData); if(length>0&&n>0&&n<length){ char* pFirstStart = pData; char* pFirstEnd = pData+n-1; char* pSecondStart = pData+n; char* pSecondEnd = pData+length-1; reverseStr(pFirstStart,pFirstEnd); reverseStr(pSecondStart,pSecondEnd); reverseStr(pFirstStart,pSecondEnd); } } return pData;}int main(){ char data[1001]; int n; while(scanf("%s%d",data,&n)!=EOF){ printf("%s\n",leftRotateString(data,n%strlen(data))); } return 0;}
劍指offer系列源碼-左旋轉字串