例题:给定一个字符串S[0…N-1],要求把S的前K个字符移动到S的尾部,如把字符串"abcdef"前面的2个字符‘a’,‘b’移动到字符串的尾部,得到新字符串“cdefab”即字符串循环左移k位。(时间复杂度要求是O(n),空间复杂度是O(1))
常想到的方法(不满足时间复杂度或者空间复杂度):
1.暴力位移法
每次循环左移1位,调用k次即可
时间复杂度O(kN),空间复杂度为O(1)
//移动一位的方法
void LeftRotateStringOne(char* str, int n) {
char str0 = str[0];//记录下第一个字符
for (int i = 1; i < n; i++)
{
str[i - 1] = str[i];
}
str[n - 1] = str0;//将第一个