class Solution {
public String reverseWords(String s) {
/**先trim一下去掉前后的空格*/
String str = s.trim();
/**转成字符数组 */
char[] sArr = str.toCharArray();
/**先整体倒置*/
int l = 0;
int r = sArr.length - 1;
reverse(sArr, l, r);
/**然后每个单词中逆序 */
int left = 0;
int right = 0;
StringBuilder sb = new StringBuilder();
while(right < sArr.length) {
/**出这个循环的时候right位置是空格,它的前一个位置是当前字符串结尾 */
while(right < sArr.length && sArr[right] != ' ') {
right ++;
}
/**当前单词内部反转 */
reverse(sArr, left, right - 1 );
/**加上当前字符 */
sb.append(sArr, left, right-left);
/**如果还没到结尾也就是还有下个单词(我们刚开始把开头结尾的空格都通过trim去掉了),就加个空格和下个衣服分割*/
if(right != sArr.length) {
sb.append(" ");
}
/**找下一个单词的起点 */
left = right;
while(left < sArr.length && sArr[left] == ' ') {
left ++;
}
/**出这个循环的时候left又是一个字符的起点位置 */
right = left;
}
return sb.toString();
}
public void swap(char[] sArr, int i, int j) {
char temp = sArr[i];
sArr[i] = sArr[j];
sArr[j] = temp;
}
public void reverse(char[] sArr, int start, int end) {
while(start < end) {
swap(sArr, start ++, end --);
}
}
}
运行结果