public class Solution {
    public String ReverseSentence(String str) {
        if (str.length() <= 0 || str == null) return str;
        int n = str.length();
        int i = 0;
//         假如全部都是空,则返回本身
        boolean flag = false;
        while (i < n) {
            if (str.charAt(i) != ' ') {
                flag = true;
            }
            i++;
        }
        if (!flag) return str;
        StringBuilder sb = trimSpace(str);
//         翻转整个sb
        reverse(sb, 0, sb.length() - 1);
//         逐个单词翻转
        reverseEachWords(sb);
        return sb.toString();
    }

    private StringBuilder trimSpace(String str) {
//         去前后空格,并返回一个StringBuilder对象
        int left = 0, right = str.length() - 1;
        while (left <= right && str.charAt(left) == ' ') left++;
        while (left <= right && str.charAt(right) == ' ') right--;
//         if (left >= right) return new StringBuilder(" ");
        StringBuilder sb = new StringBuilder();
        while (left <= right) {
            char ch = str.charAt(left);
            if (ch != ' ') {
                sb.append(ch);
            } else if (sb.charAt(sb.length() - 1) != ' ') {
                sb.append(ch); // 添加空格
            }
            left++;
        }
        return sb;
    }
    private void reverse(StringBuilder sb, int left, int right) {
        while (left < right) {
            char temp = sb.charAt(left);
            sb.setCharAt(left, sb.charAt(right));
            sb.setCharAt(right, temp);
            left++;
            right--;
        }
    }

    private void reverseEachWords(StringBuilder sb) {
        int start = 0, end = 0;
        int len = sb.length();
        while (end < len) {
            while (end < len && sb.charAt(end) != ' ') {
                end++;
            }
            reverse(sb, start, end-1); // end哪里恰好是空格位置啦
            start = end + 1;
            end++;
        }
    }
}