1. 程式人生 > >左旋轉字符串

左旋轉字符串

abcd div 操作 amp fine 字符串 vol 轉字符串 ret

題目描述:

定義字符串的左旋轉操作:把字符串前面的若幹個字符移動到字符串的尾部,如把字符串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;
}

  

左旋轉字符串