题目:
将 char [] str = “hello,you,world” 改为 "world,you,hello",要求空间复杂度为1
(也就是使用的变量只能是单个字符或者常数,不能使用数组!!!!!)
解答:
实现的关键点在于:
- 整体反转字符串。只用自身的字符串空间!
- 逐个反转子字符串。仍然是只用自身的字符串空间!
- 空间复杂度为 O(1),意味着不能使用额外的内存空间。
C语言实现:
#include <stdio.h>
#include <string.h>// 工具函数:反转字符串
void reverse(char str[], int start, int end) {while (start < end) {char temp = str[start];str[start] = str[end];str[end] = temp;start++;end--;}
}// 主函数
int main() {char str[] = "hello,you,world"; // 原始字符串int len = strlen(str);// Step 1: 整体反转字符串reverse(str, 0, len - 1);// Step 2: 逐个反转子字符串int start = 0;for (int i = 0; i <= len; i++) {if (str[i] == ',' || str[i] == '\0') {reverse(str, start, i - 1); // 反转每个子字符串start = i + 1;}}// 输出结果printf("Reversed string: %s\n", str);return 0;
}
python实现:
def reverse_string(s, start, end):# 将字符串列表部分反转while start < end:s[start], s[end] = s[end], s[start]start += 1end -= 1def reverse_words_in_string(s):# 将字符串转为列表以便修改str_list = list(s)n = len(str_list)# Step 1: 整体反转reverse_string(str_list, 0, n - 1)# Step 2: 按单词反转start = 0for i in range(n + 1):if i == n or str_list[i] == ',':reverse_string(str_list, start, i - 1)start = i + 1return ''.join(str_list)# 测试
original = "hello,you,world"
result = reverse_words_in_string(original)
print("Reversed string:", result)