1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85
   | package com.demo.s151;
  import java.util.Deque; import java.util.LinkedList;
 
 
 
 
 
 
 
 
 
 
 
 
 
  public class Solution {     public String reverseWords(String s) {         StringBuilder sb = trimSpaces(s);
                   reverse(sb, 0, sb.length() - 1);
                   reverseEachWord(sb);
          return sb.toString();     }
      public StringBuilder trimSpaces(String s) {         int left = 0, right = s.length() - 1;                  while (left <= right && s.charAt(left) == ' ') {             ++left;         }
                   while (left <= right && s.charAt(right) == ' ') {             --right;         }
                   StringBuilder sb = new StringBuilder();         while (left <= right) {             char c = s.charAt(left);
              if (c != ' ') {                 sb.append(c);             } else if (sb.charAt(sb.length() - 1) != ' ') {                 sb.append(c);             }
              ++left;         }         return sb;     }
      public void reverse(StringBuilder sb, int left, int right) {         while (left < right) {             char tmp = sb.charAt(left);             sb.setCharAt(left++, sb.charAt(right));             sb.setCharAt(right--, tmp);         }     }
      public void reverseEachWord(StringBuilder sb) {         int n = sb.length();         int start = 0, end = 0;
          while (start < n) {                          while (end < n && sb.charAt(end) != ' ') {                 ++end;             }                          reverse(sb, start, end - 1);                          start = end + 1;             ++end;         }     }
  }
   |