左旋转字符串

给定abcdefghi,且从第三个开始旋转,要求
时间复杂度为O(n),空间复杂度为O(1).
思路:
1、先旋转前三个abc->cba
2、在旋转剩下部分的defghi->ihgfed
3、最后整体旋转cbaihgfed->defghiabc
三个过程用同一个函数就搞定!
源码如下,VC6.0测试通过。

/*
* 左旋转字符串,时间复杂度为O(n)
* 空间复杂度为O(1)
* xtfggef 2012/5/9
*/
#include<stdio.h>
#include<string.h>

/*
* 进行局部旋转
*/
char * invert(char * start,char * end)
{
	char tmp,*ptmp = start;
	while(start!=NULL&&end!=NULL&&start<end)
	{
		tmp = *start;
		*start = *end;
		*end = tmp;
		start ++;
		end --;
	}
	return ptmp;
}
/*
* 整体旋转
*/
char * left(char *s,int pos)
{
	int len = strlen(s);
	invert(s,s+(pos-1));
	invert(s+pos,s+(len-1));
	invert(s,s+(len-1));
	return s;
}
int main()
{
	char s[] = "abcdefghij";
	puts(left(s,3));
	return 0;
}


注意事项:
1、程序中写空格的时候,别忘了切换到英文输入法环境下,否则汇报错:error C2018: unknown character '0xa1'
2、puts()的用法:puts()是C语言的输出函数,类似于printf();
区别在于:
1、puts()包含输出后换行。等价于printf("%s\n",a);
2、puts()函数只能输出字符串,不能数值或进行格式变换

你可能感兴趣的:(算法,左旋转字符串)