题目要求:
将字符串str进行循环移位,要求算法空间复杂度O(1),时间复杂度O(n)
思路:
假设str需要循环移位k位,则将其分为前后两部分,分别长k和n-k,称AB
则循环移位的过程即为XY->YX. 可由XT即转置完成,(XTYT)T=(YT)T(XT)T=YX
实现如下:
/*
* Reverse_String.cpp
*
* Created on: May 22, 2012
* Author: Rachel
*/
#include"stdio.h"
#include"string.h"
void Reverse(char* str, int s, int e)
{
char tmp;
while (s < e)
{
tmp = str[s];
str[s] = str[e];
str[e] = tmp;
s++;
e--;
}
}
void RightReverse(char* str, int k, int n)
{
if (k > 0 && n > 0)//avoid exception
{
Reverse(str, 0, k - 1);
Reverse(str, k, n - 1);
Reverse(str, 0, n - 1);
printf("%s\n", str);
}
}
int main()
{
char str[25];
int k, n;
while (scanf("%s%d", str, &k) != EOF)
{
n = strlen(str);
if (k > n)
k %= n;
RightReverse(str, k, n);
}
}