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++; } } }