翻转字符串(1)
题目描述
给定字符类型的数组chas,请在单词间做逆序调整。只要做到单词的顺序逆序即可,对空格的位置没有要求。
输入描述:
输入一行只含字母和空格的字符串,代表 c h a s ( 1 ≤ l e n g t h c h a s ≤ 1 0 5 ) chas(1 \leq length_{chas} \leq 10^5) chas(1≤lengthchas≤105)。
输出描述:
输出一行字符串,代表逆转顺序后的字符串。
示例1
输入
i am a student
输出
i ma a tneduts
备注:
时间复杂度 O ( n ) O(n) O(n),空间复杂度 O ( 1 ) O(1) O(1)。
题解:
从前往后遍历,遇到空格则将前面的字符串翻转输出,否则该字符是字符串中的一员,跳过继续寻找下一个空格。
代码:
#include <stdio.h>
#include <string.h>
const int N = 1e5 + 10;
char s[N];
int main(void) {
gets(s);
int k = 0, i, j;
for (i = 0; s[i]; ++i) {
if (s[i] != ' ') continue;
for (j = i - 1; j >= k; --j) putchar(s[j]);
putchar(s[i]);
k = i + 1;
}
if (k < i) for(j = i - 1; j >= k; --j) putchar(s[j]);
return 0;
}