# 557. 反转字符串中的单词 III

<https://leetcode-cn.com/problems/reverse-words-in-a-string-iii/>

## 解法一：c++STL

思路:善用c++STL的reverse模板算法.

```
template<class BidirectionalIterator>
   void reverse(
      BidirectionalIterator _First, 
      BidirectionalIterator _Last
   );
参数:
_First
指向第一个元素的位置的双向迭代器在元素交换的范围。
_Last
指向通过最终元素的位置的双向迭代器在元素交换的范围。
即:反转(first,last-1)区间内的元素顺序.
```

```cpp
//cpp
class Solution {
public:
    string reverseWords(string s) {
        for (int i = 0; i < s.length(); i++) {
            if (s[i] != ' ') { //i指向第一个非空格
                int j = i;
                for (; j < s.length() && s[j] != ' '; j++) {} //j指向下一个空格
                reverse(s.begin()+i, s.begin()+j);//反转(i,j-1)之间的元素
                i = j; // 更新i
            }
        }
        return s;
    }
};
```

## 解法二：py

将s按空格split成列表words，然后对words每个元素反转存在reverse中。

然后用join函数连接reverse中元素。

```python
class Solution:
    def reverseWords(self, s: str) -> str:        
        words = s.split(" ")
        reverse = []  #每个单词反转的列表
        for word in words:
            word = word[::-1]
            reverse.append(word)
        return " ".join(reverse)  #用空格连接
```
