> For the complete documentation index, see [llms.txt](https://tonyding.gitbook.io/algorithm/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://tonyding.gitbook.io/algorithm/lc-186-reverse-words-in-a-string-ii.md).

# LC 186 Reverse Words in a String II(M)

Given an input string, reverse the string word by word. A word is defined as a sequence of non-space characters.

The input string does not contain leading or trailing spaces and the words are always separated by a single space.

For example, Given s = "the sky is blue", return "blue is sky the".

Could you do it **in-place** without allocating extra space?

**边界条件**

## 解题思路

通过两遍翻转，先单个字串翻转，然后全部字符串一起反正 两次翻转保证每个字符串的顺序正常，

```java
public void reverseWords(char[] s) {
    int i=0;
    //  每个字单独翻转
    for(int j=0; j<s.length; j++){
        if(s[j]==' '){
            reverse(s, i, j-1);        
            i=j+1;
        }
    }
    // 最后一个字单独翻转
    reverse(s, i, s.length-1);

    // 整个字符串全部翻转
    reverse(s, 0, s.length-1);
}

public void reverse(char[] s, int i, int j){
    while(i<j){
        char temp = s[i];
        s[i]=s[j];
        s[j]=temp;
        i++;
        j--;
    }
}
```
