题目描述
将一个英文语句以单词为单位逆序排放。例如“I am a boy”,逆序排放后为“boy a am I”
所有单词之间用一个空格隔开,语句中除了英文字母外,不再包含其他字符
数据范围:输入的字符串长度满足 1≤n≤1000
题目来源
题目来源(www.nowcoder.com/practice/48…)
输入描述
输入一个英文语句,每个单词用空格隔开。保证输入只包含空格和字母。
输出描述
得到逆序的句子
输入:
I am a boy
输出:
boy a am I
输入:
nowcoder
输出:
nowcoder
思路
本题也采用双指针法,从后往前一个遍历找空格,一个原地不动,最后两个指针中间的即为正序单词
具体实现
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string>
#include<stdlib.h>
#include <iostream>
using namespace std;
int main() {
string str;
getline(cin, str);
int i = str.length();
int m = i - 1, j = i - 1;
for (j; j >= 0; --j) {
if (str[j] == ' ') {
int k = j + 1 ;
for (k; k <= m; k++)
printf("%c", str[k]);
m = j - 1;
printf(" ");
}
if (j == 0) {
int k = j;
for (k; k <= m; k++)
printf("%c", str[k]);
}
}
return 0;
}
时间复杂度
时间复杂度为O(n)
小结
没有将两种情况统一起来,代码显的长了一点,希望改进