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

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--;
        }
    }
}

Last updated