左旋转字符串

给定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()函数只能输出字符串,不能数值或进行格式变换

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值