一、题目描述
给你一个字符串 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;}
};