字符串的旋转--3步翻转法
来源:互联网 发布:重庆专业u盘数据恢复 编辑:程序博客网 时间:2024/06/07 14:40
问题描述
给定一个字符串,要求将字符串前面的若干字符移到字符串的尾部。例如:
将字符串“abcdef”的前3个字符’a’、’b’和’c’移到字符串的尾部,那么原字
符串将变成“defabc”,请写一个函数实现此功能.
思路:可通过三步翻转的方法实现
- step1:将原字符串分成两部分,一部分是字符串前面的“若干字符”X,另一部分是除了X的Y;
- step2:将X的所有字符翻转,即上面所说的,将”abc”翻转成”cba”,将”def”翻转成”fed”;
- step3:将整个字符串全部翻转–即将”cbafed”翻转成”defabc”。即实现了字符串前面若干字符移动到尾部。
时间复杂度为O(n)
代码如下:
/************************Author:tmwdate:2017-11-29************************/#include <stdio.h>#include <stdlib.h>#include <string.h>#define swap(x,y,t) (t=x,x=y,y=t)void rotate(char* array , int low , int high ){ int temp; while(low<high) { swap(array[low],array[high],temp); low++; high--; }}void three_steps_rotate(char* array , int rotate_part , int array_len ){ rotate(array,0,rotate_part-1); rotate(array,rotate_part,array_len-1); rotate(array,0,array_len-1);}
测试代码:
int main(){ printf("测试代码!\n"); char a1[] = "abcdefghigk"; printf("原字符串为:%s\n",a1); three_steps_rotate(a1,3,strlen(a1)); printf("旋转后的字符串为:%s\n",a1); char a2[] = "zhongkeyuanjisuansuo"; printf("原字符串为:%s\n",a2); three_steps_rotate(a2,4,strlen(a2)); printf("旋转后的字符串为:%s\n",a2); return 0;}
测试结果:
阅读全文
0 0
- 字符串的旋转--3步翻转法
- 字符串翻转练习—三步翻转法
- 三步翻转法------有意思的方法
- 三步翻转法
- 剑指offer42-翻转单词顺序和字符串的左旋转
- 面试题42:翻转单词的顺序,左旋转字符串
- 坐标的旋转,翻转
- 逆置字符串之三步翻转
- 翻转字符串VS左旋转字符串
- 翻转字符串,改进“三步翻转”,减少交换次数
- 翻转单词顺序VS左旋转字符串----->“字符串翻转”
- 关于三步翻转法的小题
- 左旋转字符串LeftRotateString -- 翻转单词顺序
- 链表翻转、左旋转字符串
- 翻转单词顺序VS左旋转字符串
- 翻转单词顺序 VS 左旋转字符串
- 翻转单词顺序VS左旋转字符串
- 翻转单词顺序vs左旋转字符串
- Add to List 657. Judge Route Circle
- 虚幻4游戏菜单功能的实现
- ViewPager实现循环广告
- 关于热点的一些思考
- Java小游戏之小迷宫游戏
- 字符串的旋转--3步翻转法
- HDU
- 车牌识别一体机功能详细讲解第一部分
- java.lang.NoClassDefFoundError: org/apache/commons/lang3/StringUtils
- win10 tensorflow使用笔记——安装及训练mnist
- BuildError: Could not build url for endpoint 'auth.register'(关键词:Web开发/Flask/bug)
- 文章标题
- 控制dropout_ratio递增(0.1 -> 0.9),其他参数不变
- 区块链开发(四)Geth 基本命令2