天天算法01——左旋转字符串

题目:(微软面试100题中的第26题)

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

解答:

逆序排列abcd:abcd1234 → dcba1234;
逆序排列1234:dcba1234 → dcba4321;
全部逆序:dcba4321 → 1234abcd。

#include <stdio.h>

#include <string.h>



void revise(char *str, int length)

{

	char c;

	int i = 0;

	for(; i<length/2; i++){

		c = *(str+i);

		*(str+i) = *(str+(length-i-1)*sizeof(char));

		*(str+(length-i-1)*sizeof(char))=c;

	}

}



void leftrotate(char *p, int m)

{

	int len = strlen(p);

	revise(p, m);

	revise(p+m, len-m);

	revise(p, len);

}



int main()

{

	char a[]="abcd1234";

	leftrotate(a, 4);

	printf("%s", a);

	return 0;

}

参考资料:

http://blog.csdn.net/v_JULY_v/article/details/6322882

你可能感兴趣的:(字符串)