题解 | #字符逆序#
字符逆序
http://www.nowcoder.com/practice/cc57022cb4194697ac30bcb566aeb47b
题意
给定字符串, 输出其反向字符串
方法
反向并输出
直接使用C++的reverse
函数,对字符串反向.
再将该字符串输出即可
代码
#include<bits/stdc++.h>
using namespace std;
int main(){
char s[10010];
while( cin.getline(s,10000,'\n')){ // 读入
reverse(s,s+strlen(s)); // 反向
printf("%s\n",s); // 输出
}
return 0;
}
复杂度分析
时间复杂度: 读入,反向和输出,都是和字符串长度相关,所以时间复杂度为
空间复杂度: 主要在字符串的存储,所以空间复杂度为
不操作字符串,改变输出遍历顺序
以样例数据I am a student
为例
字符串 | I | a | m | a | s | t | u | d | e | n | t | |||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
正向下标 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 |
反向下标 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
其正向下标 反过来,就是反向下标.
因为题目只检查输出,不会检查内存内容,所以我们控制输出的遍历顺序即可,而不需要操作字符串.
代码
#include<bits/stdc++.h>
using namespace std;
int main(){
char s[10010];
while( cin.getline(s,10000,'\n')){
int n = strlen(s); // 只获取长度 不操作字符串
for(int i =n-1;i>=0;i--){ // 控制遍历顺序为反向
printf("%c",s[i]);
}
printf("\n",s);
}
return 0;
}
复杂度分析
时间复杂度: 读入和输出,都是和字符串长度相关,所以时间复杂度为
空间复杂度: 主要在字符串的存储,所以空间复杂度为