面试热门题:字符串左旋右旋
来源:互联网 发布:父母干涉爱情知乎 编辑:程序博客网 时间:2024/04/29 20:30
面试的时候有很多这种左旋或者右旋的题目,今天我就把这个题目用不同的方式探讨一下
例题:请实现字符串右循环移位函数,比如:"abcdefg"循环右移3位就是"efgabcd";
第一种方法:三目旋转法,三目旋转法的思想就是先把字符串整个逆置,然后需要旋转几位就逆置前几个,最后逆置后面的字符
如下图所示:
代码实现:
void RightLoopMove(char *pStr, unsigned short steps){ assert(pStr); int len = strlen(pStr); _reserve(pStr, pStr, pStr + len-1);//len-1是字符串pStr的最后一个不是\0字符的位置,逆置整个字符串 _reserve(pStr, pStr, pStr + steps - 1);//逆置前面部分 _reserve(pStr, pStr + steps, pStr + len - 1);//逆置后面部分 printf("%s\n", pStr);}void _reserve(char *str, char *left, char *right){ assert(str);//用assert断言,以免出错 assert(left); assert(right); while (left < right)//循环终止的条件是左边小于右边 { char tmp = 0; tmp = *left; *left = *right; *right = tmp; left++; right--; }}
第二种方法是暴力强转法,
暴力强转法是指先把最后的非‘’\0‘’的字符保存到临时变量tmp里,然后从后往前把字符一个一个往后一个位置上移动,最后将tmp保存到第一个字符的位置上,循环需要旋转的字符个数,就可以得到旋转好的字符串了
具体步骤如下图所示:
代码实现:
void RightLoopMove(char *pStr, unsigned short steps){assert(pStr);int len = strlen(pStr);int i = len - 1;while (steps--){char tmp = *(pStr + len - 1);for (int i = len - 1; i >= 0; i--){pStr[i] = pStr[i - 1];}pStr[0] = tmp;}printf("%s\n", pStr);}好了,今天的分享就这些了,如果还有别的方法欢迎一起学习,如果有什么错误也希望大家能够指出,一起学习哦!
4 0
- 面试热门题:字符串左旋右旋
- 字符串左旋右旋--程序员面试宝典
- 左旋右旋字符串
- 微软面试之 26 左旋右旋字符串
- 左旋(右旋)字符串
- 字符串的左旋右旋
- 字符串的左旋和右旋
- 字符串左右旋
- 【字符串】旋转字符串(左旋或右旋k个字符)
- 实现字符串左旋和右旋的常见方法
- 剑指offer之字符串左旋右旋问题
- 序列的左旋右旋
- 判断一个字符串是否为另外一个字符串左旋或右旋之后的字符串
- 判断一个字符串是否为另外一个字符串左旋或右旋之后的字符串。
- 判断一个字符串是否与另外一个字符串左旋或者右旋之后相等
- 微软面试100题---左旋字符串
- 字符串左旋右旋——三步旋转法和移相法
- 将一个字符串的前n个字符旋转到后面,采用左旋,或者右旋。
- 寻找矩阵鞍点
- 关于构造函数继承的一些问题
- KMP算法 --->字符串
- Toast 显示提示信息
- 嵌入式 、linux驱动模块编译(初学者)
- 面试热门题:字符串左旋右旋
- PyQt5:网格布局(13)
- 求解爱因斯坦阶梯问题。
- 五. Ubuntu下安装 tftp 服务器和 NFS 服务器
- 谈谈我对Spring IOC与DI的理解
- 再谈SQL优化:组合索引
- android一些有用的网址
- 第7章 取消与关闭
- SICP 练习1.9