public class Solution { /** * @param str: a string * @return: return a string */ public char[] reverseWords(char[] str) { // handle corner cases if (str == null || str.length < 2) { return str; } // step #1 flip the whole thing reverse(str, 0, str.length - 1); // System.out.println(Arrays.toString(str)); // step #2 flip each word int left = 0; for (int right = 0; right < str.length - 1; right++) { if (str[right] != ' ') { continue; } reverse(str, left, right - 1); left = right + 1; } // one last reverse reverse(str, left, str.length - 1); return str; } private void reverse(char[] str, int left, int right) { while (left < right) { char tmp = str[left]; str[left] = str[right]; str[right] = tmp; left++; right--; } } }