Reverse Words in a String

 Given an input string 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 at least one space.


Return a string of the words in reverse order concatenated by a single space.


Note that s may contain leading or trailing spaces or multiple spaces between two words. The returned string should only have a single space separating the words. Do not include any extra spaces.


 


Example 1:


Input: s = "the sky is blue"

Output: "blue is sky the"

Example 2:


Input: s = "  hello world  "

Output: "world hello"

Explanation: Your reversed string should not contain leading or trailing spaces.

Example 3:


Input: s = "a good   example"

Output: "example good a"

Explanation: You need to reduce multiple spaces between two words to a single space in the reversed string.

 


Constraints:


1 <= s.length <= 104

s contains English letters (upper-case and lower-case), digits, and spaces ' '.

There is at least one word in s.

 


Follow-up: If the string data type is mutable in your language, can you solve it in-place with O(1) extra space?


class Solution {
    public String reverseWords(String s) {
        // Step 1: Trim leading/trailing spaces
        s = s.trim();

        // Step 2: Split the string by one or more spaces
        String[] word = s.split("\\s+"); // ["a", "good", "example"]

        // Step 3: Reverse the array
        int left = 0;
        int right = word.length - 1;

        while (left < right) {
            String temp = word[left];
            word[left] = word[right];
            word[right] = temp;
            left++;
            right--;
        }

        // Step 4: Join the reversed words with single space
        return String.join(" ", word);
    }
}



Comments

Popular posts from this blog

Two Sum II - Input Array Is Sorted

Comparable Vs. Comparator in Java

Increasing Triplet Subsequence