void
*pszStringRotate(
char
*pszString, intnCharsRotate)
|
比如ABCDEFG,移3位变DEFGABC,要求空间复杂度O(1),时间复杂度O(n)。
过程如下:
ABCDEFG
第一步:局部翻转
ABC DEFG == = 》 CBA GFED
第二步:整体翻转
CBA GFED == = 》 DEFGABC
ABCDEFG
第一步:局部翻转
ABC DEFG == = 》 CBA GFED
第二步:整体翻转
CBA GFED == = 》 DEFGABC
#include <stdio.h>
#include <stdlib.h>
#include<iostream>
using namespace std;
void Rorder(char *pF, char *pE)
{
char temp;
while (pF <pE)
{
temp = *pF;
*pF = *pE;
*pE = temp;
pF++;
pE--;
}
}
char * pszStringRotate(char *pszString, int nCharsRotate)
{
char *pR = pszString;
int n = 0;
while (pszString[n]!='\0')
n++; //得到字符串长度
if (n < nCharsRotate||nCharsRotate<=0)
return pszString; //入口参数检测
Rorder(pszString, pszString + nCharsRotate-1); //C B A
Rorder( pszString + nCharsRotate, pszString + n -1); //GFED
Rorder(pszString, pszString + n - 1); //DEFGABC
return pszString;
}
int main()
{
char ch[]="ABCDEFG";
char test[100]={0};
int len=strlen(ch);
char str[100]={0};
printf("平移之前::\n%s\n",ch);
for(int i=0;i<=len;i++)
{
sprintf(str,"向左平移%d",i);
strcpy(test,ch);
pszStringRotate(test,i);
printf("%s:\t%s\n",str,test);
}
return 0;
}