码迷,mamicode.com
首页 > 其他好文 > 详细

左旋转字符串

时间:2017-06-04 21:26:54      阅读:142      评论:0      收藏:0      [点我收藏+]

标签:bcd   abc   printf   操作   题目   class   字符串   stdio.h   cpp   

题目描述:

定义字符串的左旋转操作:把字符串前面的若干个字符移动到字符串的尾部,如把字符串abcdef左旋转2位得到字符串cdefab。
请实现字符串左旋转的函数,要求对长度为n的字符串操作的时间复杂度为O(n),空间复杂度为O(1)。 

我的思路有点简单,就是从断点开始从前往后依次将后面的字符向前移动一位,再把最后面的那个字符换成断点之前的字符

#include<stdio.h>
#include<string.h>
#define N 100

void leftRevolve(char *Inputstr, int n)
{
    int slen = strlen(Inputstr);
	int flag = 1;
	int j;
	char c;
	for (int i = 1; i <= n;)
	{
		if (flag)
		{
			j = n - i;
		 	c = Inputstr[j];
		}
		if (j < slen - i)
		{
			Inputstr[j] = Inputstr[++j];
			flag = 0;
		}
		else
		{
			Inputstr[j] = c;
			++i;
			flag = 1;
		}
	}
}

int main()
{
	int n;
	scanf("%d", &n);
    char Inputstr[N];
    scanf("%s", Inputstr);
	leftRevolve(Inputstr, n);
    printf("左旋转%d位后字符串变为%s\n", n, Inputstr);
    return 0;
}

  

左旋转字符串

标签:bcd   abc   printf   操作   题目   class   字符串   stdio.h   cpp   

原文地址:http://www.cnblogs.com/lj95/p/6941592.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!