循环移位
来源:互联网 发布:轩辕世界神兽数据 编辑:程序博客网 时间:2024/05/02 01:40
题目要求:
将字符串str进行循环移位,要求算法空间复杂度O(1),时间复杂度O(n)
思路:
假设str需要循环移位k位,则将其分为前后两部分,分别长k和n-k,称AB
则循环移位的过程即为XY->YX. 可由XT即转置完成,(XTYT)T=(YT)T(XT)T=YX
实现如下:
#include"stdio.h"#include"string.h"void ReverseString(char* str, unsigned int nStart, unsigned int nEnd){char tmp;while(nStart < nEnd){tmp = str[nStart];str[nStart] = str[nEnd];str[nEnd] = tmp;++ nStart;-- nEnd;}}void RightReverse(char* str, unsigned int nBit, unsigned int nLen){//avoid exceptionif (nBit > 0 && nLen > 0){ReverseString(str, 0, nLen - 1);ReverseString(str, 0, nBit - 1);ReverseString(str, nBit, nLen - 1);}}void LeftReverse(char* str, unsigned int nBit, unsigned int nLen){//avoid exceptionif (nBit > 0 && nLen > 0){ReverseString(str, 0, nBit - 1);ReverseString(str, nBit, nLen - 1);ReverseString(str, 0, nLen - 1);}}int main(){const int MAXLEN = 64;char str[MAXLEN] = {0};unsigned int kBit, len;printf("Please input the string and start from the bit:");while (scanf("%s%d", str, &kBit) != EOF){len = strlen(str);if (kBit > len)kBit %= len;RightReverse(str, kBit, len);LeftReverse(str, kBit, len);printf("%s\n",str);}}
- 循环移位
- 循环移位
- 循环移位
- 循环移位
- 循环移位
- 循环移位
- 循环移位
- 循环移位
- 循环移位
- 移位和循环指令
- 循环移位的实现
- 数组循环移位算法
- 数组循环移位问题
- 数组循环移位
- 数组循环移位
- 数组循环移位
- 数组循环移位(转)
- 一劳永逸---循环移位操作
- 怎么做好一个项目经理
- Resource is out of sync with the file system的解决办法
- Linux 存储管理分析札记
- cocos2d中CCSprite的使用总结
- 在PS中用最快速度做绚丽背景
- 循环移位
- POJ 2406 Power Strings
- photoshop常见的锯齿问题
- js对前台的限制
- hdu 2037 贪心小水题
- MIPS GCC 嵌入式汇编(龙芯适用)
- 【多线程学习】:互斥锁Mutex
- Android应用开发——TextView控件属性列表
- 龙芯下汇编语言编程(2)