首页 > 代码库 > 左旋转字符串

左旋转字符串

题目描述:

定义字符串的左旋转操作:把字符串前面的若干个字符移动到字符串的尾部,如把字符串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;
}

  

左旋转字符串