AcWing 77. 翻转单词顺序
原题链接
中等
C++ 代码(未使用库函数)
// 反转字符串的操作:
// 1. 先反转整个字符串。
// 2. 再逐个反转各个单词即可。
class Solution {
public:
string reverseWords(string s) {
if(!s.size()) return string();
// 1. 反转整个字符串
for(int i = 0, j = s.size() - 1; i <= j; i++, j--)
{
swap(s[i], s[j]);
}
// 2. 逐个反转各个单词
int k = 0;
for(int i = 0; i < s.size(); ++i)
{
if(s[i] != ' ' && i != s.size() - 1) continue; // 空格与字符串结尾都作为一个单词的结束。
int j = 0;
if(i != s.size() - 1) j = i - 1; // 当前为空格
else j = i; // 当前为字符串结尾
while(k <= j)
{
swap(s[k], s[j]);
k++;
j--;
}
k = i + 1; // 跳到下一个单词的首位置
}
return s;
}
};
swap也是库函数