华为-句子逆序
原创
©著作权归作者所有:来自51CTO博客作者ReignsDu的原创作品,请联系作者获取转载授权,否则将追究法律责任
题目链接
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
输入
复制
输出
复制
题解:
先整体反转在局部反转
#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;
}