题目描述
输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。为简单起见,标点符号和普通字母一样处理。例如输入字符串"I am a student. “,则输出"student. a am I”。
算法流程:
栈法:
从最后一个字符开始,遇到单词则入栈,遇到空格或第一个字符都要检查一下栈中是否有单词可以弹出,若有则全部弹出并拼接,每弹出一个完整的单词就添加一个空格
代码:
class Solution {
public:
string reverseWords(string s) {
stack<char> word;
string result = "";
for (int i = s.size() - 1; i >= 0; --i)
{
if (s[i] != ' ') //遇到单词则入栈
{
word.push(s[i]);
}
if (s[i] == ' ' || i == 0) //遇到空格或第一个字符都要检查一下栈中是否有单词可以弹出
{
bool flag = false; //标记是否发生出栈
while (word.empty() == false)
{
result.push_back(word.top()); //因为word栈存储的元素为char型,而result为string型,故不能相加,只能使用push_back()
word.pop();
flag = true;
}
if (flag)
{
result += " ";
}
}
}
return result.substr(0, result.size() - 1); //最后一个单词后面会多加一个空格
}
};