翻转单词顺序
剑指 offer 58
题目
输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。为简单起见,标点符号和普通字母一样处理。例如输入字符串"I am a student. ",则输出"student. a am I"。
- 无空格字符构成一个单词。
- 输入字符串可以在前面或者后面包含多余的空格,但是反转后的字符不能包括。
- 如果两个单词间有多余的空格,将反转后单词间的空格减少到只含一个。
算法
- 双指针问题。
- 一个指针从后往前寻找第一个非空格字符,另一个指针从前一个指针指向的非空格字符出发,直到找到一个空格字符为止。
- 将左指针赋给右指针,继续直到index为零
代码
class Solution {
public:
string reverseWords(string s) {
string result;
int n = s.size();
if(n == 0) return result;
int right = n - 1;
while(right >= 0){
//从后往前寻找第一字符
while(right >= 0 && s[right] == ' ') right--;
if(right < 0) break;
//从后往前寻找第一个空格
int left = right;
while( left >= 0 && s[left] != ' ' ) left--;
//添加单词到结果
result += s.substr(left + 1, right - left);
result += ' ';
//继续往前分割单词
right = left;
}
//去除最后一个字符空格
if (!result.empty()) result.pop_back();
return result;
}
};

浙公网安备 33010602011771号