面试热门题:字符串左旋右旋

原创 2016年06月01日 01:34:35

面试的时候有很多这种左旋或者右旋的题目,今天我就把这个题目用不同的方式探讨一下

例题:请实现字符串右循环移位函数,比如:"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);
}
好了,今天的分享就这些了,如果还有别的方法欢迎一起学习,如果有什么错误也希望大家能够指出,一起学习哦!









版权声明:本文为博主原创文章,转载需注明出处

相关文章推荐

剑指offer之字符串左旋右旋问题

右旋 关于思路: 1.右旋就是把字符串的前几个字符放到字符串的后面,首先,可以根据要旋转的数量,把字符串分成两部分。 2.第一部分进行翻转,第二部分进行翻转。 3.整体翻转 例如:abcde...

字符串左旋右旋——三步旋转法和移相法

字符串左旋右旋——三步旋转法和移相法!(K个字符)

SBTree的左旋右旋以及各种调整操作的基本实现(包含查找第k大的数值)

在完成了左旋和右旋操作之后,我们要实现调用两种单旋操作的逻辑,也就是调整操作。在插入之后,一共有 44 种触发旋转的情况,分别为 LL 型、LR 型、RR 型和 RL 型。通过旋转的名称,可以很直观的...

判断一个字符串是否为另外一个字符串左旋或右旋之后的字符串。

#define _CRT_SECURE_NO_WARNINGS 1 #include #include #include #include void show(char arr[], int len)...

易的核心理念之天道左旋、地道右旋

首先要特别说明,此文是在一位称为阿润的博友反复督促之下才形成,草根在这里要特别言谢。 说道天道左旋与地道右旋的问题,就必须要提到易原图,此图已经反复在博文中晒过,但由于太过重要还要重新晒出: ...

什么是“天道左旋、地道右旋”?

人类永远生活在旋转的世界上。   首先解释一下标题:   1、天道:宇宙空间,以及世界万物运行的终极规则。   2、地道:在天道驾驭下,世界万物运行的一般规则。   或许,您还不明白!咱们试举...

在红黑树的基础上实现区间树的创建,左旋,右旋,插入和查找

题目:在红黑树的基础上实现区间树的创建,左旋,右旋,插入和查找 算法思想: 区间树介绍:       区间树是在红黑树基础上进行扩展得到的支持以区间为元素的动态集合的操作,其中每个节点的关键值...

avl树左旋右旋的理解

一直没搞懂非平衡二叉树变平衡二叉树时左旋右旋,今天下定决心搞懂,然后在众多博客中终于找到了这样一篇,非常形象,记录如下: AVL树是最先发明的自平衡二叉查找树。在AVL树中任何节点的两个子树...

nyoj202 红黑树 (二叉树的左旋右旋)

题目202 题目信息 运行结果 本题排行 讨论区 红黑树 时间限制:3000 ms  |  内存限制:65535 KB 难度:3 描述 什...

红黑树的插入创建(左旋 右旋)

红黑树是每个节点都带有颜色属性的二叉查找树,颜色或红色或黑色。除了二叉查找树的性质,同时还有以下的五大性质: 性质1. 节点是红色或黑色。 性质2. 根节点是黑色。 性质3 每个叶节...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)