Reverse Words in a String

Question

Given an input string, reverse the string word by word.

Example
Given s = "the sky is blue" ,
return "blue is sky the" .

Clarification

  • What constitutes a word?
    A sequence of non-space characters constitutes a word.
  • Could the input string contain leading or trailing spaces?
    Yes. However, your reversed string should not contain leading or trailing spaces.
  • How about multiple spaces between two words?
    Reduce them to a single space in the reversed string.

Solution

Java

public class Solution {
    /**
     * @param s : A string
     * @return : A string
     */
    public String reverseWords(String s) {
        // write your code
        if (s == null || s.indexOf(" ") == -1) {
            return s;
        }
        StringTokenizer tokens = new StringTokenizer(s);
        StringBuilder sb = new StringBuilder();
        while (tokens.hasMoreTokens()) {
            sb.insert(0, tokens.nextToken());
            sb.insert(0, " ");
        }
        return sb.toString().trim();
    }
}