0186. Reverse Words in a String II

https://leetcode.com/problems/reverse-words-in-a-string-ii

Description

Given a character array s, reverse the order of the words.

A word is defined as a sequence of non-space characters. The words in s will be separated by a single space.

Your code must solve the problem in-place, i.e. without allocating extra space.

Example 1:

**Input:** s = ["t","h","e"," ","s","k","y"," ","i","s"," ","b","l","u","e"]
**Output:** ["b","l","u","e"," ","i","s"," ","s","k","y"," ","t","h","e"]

Example 2:

**Input:** s = ["a"]
**Output:** ["a"]

Constraints:

  • 1 <= s.length <= 105

  • s[i] is an English letter (uppercase or lowercase), digit, or space ' '.

  • There is at least one word in s.

  • s does not contain leading or trailing spaces.

  • All the words in s are guaranteed to be separated by a single space.

ac

class Solution {
    public void reverseWords(char[] str) {
        // corner cases
        if (str.length < 2) return;

        // reverse whole sentence
        reverse(str, 0, str.length-1);

        // reverse single word, for loop, finally check i to reverse last word
        for (int i = 0, j = 0; i < str.length; i++) {
            if (i+1 == str.length || str[i+1] == ' ') {
                reverse(str, j, i);
                i++;
                j = i + 1;
            }
        }

    }
    private void reverse(char[] str, int start, int end) {
        int s = start, e = end;
        while (s < e) {
            char tmp = str[s];
            str[s] = str[e];
            str[e] = tmp;
            s++;
            e--;
        }
    }
}

Last updated