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

# 0557. Reverse Words in a String III

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

## Description

Given a string `s`, reverse the order of characters in each word within a sentence while still preserving whitespace and initial word order.

**Example 1:**

```
**Input:** s = "Let's take LeetCode contest"
**Output:** "s'teL ekat edoCteeL tsetnoc"
```

**Example 2:**

```
**Input:** s = "God Ding"
**Output:** "doG gniD"
```

**Constraints:**

* `1 <= s.length <= 5 * 104`
* `s` contains printable **ASCII** characters.
* `s` does not contain any leading or trailing spaces.
* There is **at least one** word in `s`.
* All the words in `s` are separated by a single space.

## ac

```java
class Solution {
    public String reverseWords(String s) {
        // edge cases
        if (s.length() <= 1) return s;

        char[] chars = s.toCharArray();
        int l = 0;
        for (int i = 0; i < chars.length; i++) {
            if (chars[i] == ' ') { // meet space
                reverse(chars, l, i-1);
                l = i + 1;
            }
        }
        reverse(chars, l, chars.length-1); // last word

        return String.valueOf(chars);
    }

    private void reverse(char[] chars, int left, int right) {
        while (left < right) {
            char tmp = chars[left];
            chars[left] = chars[right];
            chars[right] = tmp;
            left++;
            right--;
        }
    }
}
```
