一、题目描述
给你一个字符串 s ,请你反转字符串中 单词 的顺序。
单词 是由非空格字符组成的字符串。s 中使用至少一个空格将字符串中的 单词 分隔开。
输入:s = "the sky is blue"
输出:"blue is sky the"
输入:s = " hello world "
输出:"world hello"
解释:反转后的字符串中不能存在前导空格和尾随空格。
输入:s = "a good example"
输出:"example good a"
解释:如果两个单词间有多余的空格,反转后的字符串需要将单词间的空格减少到仅有一个。
二、题目解析
1.翻转整个字符串
2.循环去除每个单词的空格
3.翻转每个单词
4.去除字符串最后的多余的长度
1.翻转整个字符串
2.循环去除每个单词的空格
3.翻转每个单词
4.去除字符串最后的多余的长度
class Solution {
public:
string reverseWords(string s) {
int len = s.size();
int new_index = 0;
reverse(s.begin(), s.end());
for (int i = 0; i < len; i++) {
if (s[i] == ' ') {
continue;
}
//增加单词后面的空格
if(new_index != 0)
s[new_index++] = ' ';
//遍历每一个单词,放入字符串,一个新变量end索引
int end = i;
while (s[end] != ' ' && end < len) {
s[new_index] = s[end];
new_index++;
end++;
}
//翻转每个单词,记得减去字符长度
int len_tmp = end - i;
reverse(s.begin() + new_index - len_tmp, s.begin() + new_index);
//i的索引值跨过这个单词,找新的单词
i = end;
}
//去除末尾的多余长度
s.erase(s.begin() + new_index, s.end());
return s;
}
};