左旋轉字符串

題目:

定義字符串的左旋轉操做:把字符串前面的若干個字符移動到字符串的尾部。數組

如把字符串 abcdef  左旋轉 2  位獲得字符串 cdefab。請實現字符串左旋轉的函數。函數

要求時間對長度爲 n  的字符串操做的複雜度爲 O(n),輔助內存爲 O(1)。code

分析:

網上看到解法不少種,就不詳細說明了。內存

我採用的是數組不對稱的交換時間複雜度應該是O(n)。字符串

代碼實現(GCC編譯經過):

#include "stdio.h"
#include "stdlib.h"

void reverse_str(char str[],int n,int m);

int main(void)
{
	char str[] = "abcdef";
	reverse_str(str,6,2);
	return 0;
}

//str爲字符串數組,n爲數組長度,m爲左移位數
void reverse_str(char str[],int n,int m)
{
	int i,j;
	char tmp;	
        
	for(i=0,j=n-1;i<j;i++,j--)
	{
		tmp = str[i];
		str[i] = str[j];
		str[j] = tmp;
	}

	for(i=0,j=n-m-1;i<j;i++,j--)
	{
		tmp = str[i];
		str[i] = str[j];
		str[j] = tmp;
	}

	for(i=n-m,j=n-1;i<j;i++,j--)
	{
		tmp = str[i];
		str[i] = str[j];
		str[j] = tmp;
	}

	printf("%s\n",str);
}
相關文章
相關標籤/搜索