字符串反转
目录
一、题型解释
字符串反转是将原字符串的字符顺序完全颠倒的操作。常见
题型:
-
基础反转:将整个字符串完全反转(如
"hello" → "olleh"
)。 -
部分反转:反转字符串中的某个子区间(如反转前k个字符)。
-
单词级反转:按单词为单位反转(如
"hello world" → "world hello"
)。 -
特殊条件反转:保留特定字符位置不变(如仅反转字母,保留数字和符号)。
二、例题问题描述
例题1:输入字符串 s
(假设只含小写字母),输出其完全反转后的字符串。
例题2:输入字符串 s
(含空格),按单词反转顺序,如 "the sky is blue" → "blue is sky the"
。
C语言实现
解法1:双指针交换法(难度★)
就像两个同学从两头交换纸条
c
#include <stdio.h>
#include <string.h> // 要用strlen函数
void reverseString(char* s) {
int left = 0; // 左边的同学从第一个字符开始
int right = strlen(s) - 1; // 右边的同学从最后一个字符开始
// 当左边同学还在右边同学左边时,继续交换
while (left < right) {
// 交换两人的纸条(字符)
char temp = s[left]; // 临时保管左边的字符
s[left] = s[right]; // 左边的位置放右边的字符
s[right] = temp; // 右边的位置放临时保管的字符
left++; // 左边同学往右走一步
right--; // 右边同学往左走一步
}
}
int main() {
char s[] = "hello"; // 要反转的字符串
reverseString(s);
printf("%s", s); // 输出 olleh
return 0;
}
代码逻辑:
-
指针初始化:
left
指向字符串头部,right
指向尾部(需用strlen
计算长度)。 -
交换过程:每次交换
left
和right
位置的字符,之后left
右移、right
左移。 -
终止条件:当
left >= right
时停止,确保所有字符被处理一次。 -
时间复杂度:O(n),空间复杂度 O(1)。
通俗解释:
-
想象字符串是一排座位,每个座位坐一个字符
-
让最左边的同学(
left
)和最右边的同学(right