题目链接

​https://www.nowcoder.com/practice/48b3cb4e3c694d9da5526e6255bb73c3?tpId=37&tqId=21236&tPage=1&rp=&ru=/ta/huawei&qru=/ta/huawei/question-ranking​

题目描述

将一个英文语句以单词为单位逆序排放。例如“I am a boy”,逆序排放后为“boy a am I”
所有单词之间用一个空格隔开,语句中除了英文字母外,不再包含其他字符

接口说明

/**
 * 反转句子
 * 
 * @param sentence 原句子
 * @return 反转后的句子
 */
public String reverse(String sentence);

输入描述:

将一个英文语句以单词为单位逆序排放。

输出描述:

得到逆序的句子

示例1

输入

复制

I am a boy

输出

复制

boy a am I

题解:

先整体反转在局部反转

#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
int main(){
string s;
getline(cin, s);
reverse(s.begin(), s.end());
int space[1000];
int spacesize = 1;
space[0] = -1;
int l = s.length();
for(int i = 0; i < l; i++){
if(s[i] == ' '){
space[spacesize++] = i;
}
}
for(int i = 0; i < spacesize - 1; i++){
reverse(s.begin() + space[i] + 1, s.begin() + space[i + 1]);
}
reverse(s.begin() + space[spacesize - 1] + 1, s.end());
cout << s << endl;
return 0;
}