面试题答案
一键面试#include <stdio.h>
#include <string.h>
void reverse(char* start, char* end) {
while (start < end) {
char temp = *start;
*start = *end;
*end = temp;
start++;
end--;
}
}
void rotateString(char* str, int n) {
int len = strlen(str);
n %= len;
reverse(str, str + len - 1);
reverse(str, str + n - 1);
reverse(str + n, str + len - 1);
}
- 空间复杂度:
- 上述代码中除了输入的字符串和几个指针变量外,没有使用额外的与输入规模相关的空间,所以空间复杂度为 (O(1))。
- 时间复杂度:
reverse
函数的时间复杂度为 (O(k)),其中 (k) 是反转的字符个数。- 三次调用
reverse
函数,总的时间复杂度为 (O(len)),其中len
是字符串的长度。
如果要在 main
函数中测试该函数,可以参考以下代码:
int main() {
char str[] = "abcdef";
int n = 2;
rotateString(str, n);
printf("%s\n", str);
return 0;
}