【第22期】观点:IT 行业加班,到底有没有价值?

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

原创 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》里面是怎样解决这个问题。    一.先看看一道面试题    eg:输入一个英语句子,翻转句子中单...

字符串之字符串左旋

参考自:http://blog.csdn.net/v_july_v/article/details/6322882 左旋转字符串   * 题目:定义字符串的左旋转操作:把字符串...

程序员升职加薪指南!还缺一个“证”!

CSDN出品,立即查看!

实现字符串左旋和右旋的常见方法

说起字符串的左旋和右旋问题,想必大家都不陌生,这是一个在初学C语言过程中经常遇到的一个问题,解题的思路可以说很多,每一个人的看待问题的角度都不同,所以就可以得到不同的解题思路。下面我就列举几种方法: ...

算法研究之左旋字符串

今天看了一个大牛在网上写的关于算法的研究,感触颇深,所以写下跟随其脚步研究的过程。 定义:定义字符串的左旋转操作:把字符串前面的若干个字符移动到字符串的尾部。 如把字符串abcdef左旋转2位得到字...

字符串左旋暴力解法

#include using namespace std; void leftshitone(char * s, int n) { char t = s[0]; // 保存第一个字符 fo...

字符串左旋 VS 反转英文句子

字符串左旋问题 解法一:可以用三部反转法,把一个字符串”abcdefgh”左旋三个字符,分成两部分,”abc”,”defgh”。分别旋转两部分,得到”cbahgfed”,在总的反转得到”defgh...

【字符串】旋转字符串(左旋或右旋k个字符)

问题描述将N个字符的数组,循环右移K位。时间复杂度O(N)。 比如原数组序列为abcd1234,要求变换成的数组序列为1234abcd,即循环右移了4位。问题分析方法1、暴力位移法,时间复杂度为O...

01左旋字符串

题目描述:         定义字符串的左旋转操作:把字符串前面的k个字符移动到字符串的尾部。如把字符串abcdef左旋转k=2位得到字符串cdefab。请实现字符串左旋转的函数,要求对长度为n的字符...

算法研究之左旋字符串

今天看了一个大牛在网上写的关于算法的研究,感触颇深,所以写下跟随其脚步研究的过程。 定义:定义字符串的左旋转操作:把字符串前面的若干个字符移动到字符串的尾部。 如把字符串abcdef左旋转2位得到字...

微软面试之 26 左旋右旋字符串

.转载自:July  http://blog.csdn.net/v_JULY_v/article/details/6126406 26.左旋转字符串 题目: 定义字符串的左旋转操作:把字符串前面...
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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