Leetcode 557.反转字符串中的单词III

反转字符串中的单词III

给定一个字符串,你需要反转字符串中每个单词的字符顺序,同时仍保留空格和单词的初始顺序。

示例 1:

输入: "Let's take LeetCode contest"

输出: "s'teL ekat edoCteeL tsetnoc" 

注意:在字符串中,每个单词由单个空格分隔,并且字符串中不会有任何额外的空格。

实现思路:

刚看题目心想直接用String.split会不会更容易些,不过这样就失去了这个算法的意义了。还是采用最原始的方法,先遍历循环查找' '字符,分别获取单个单词的左边和右边的位置,此时已基本实现了单词的定位。但是有个问题,就是最后一个单词后面是没有' '这个的,因此里面反转单词的判定除了校验' '之外,还在最后一次循环的时候,依然计算下标,进行单词的反转。

 1 public class Solution {
 2     public String reverseWords(String str) {
 3         char[] buffer = str.toCharArray();
 4         int length = buffer.length;
 5         int left = 0, right = 0;
 6         boolean last;
 7         for (int i = 0; i < length; i++) {
 8             last = i == length - 1;
 9             if (buffer[i] == ' ' || last) {
10                 left = right;
11                 right = i - (last ? 0 : 1);
12                 for (; left < right; left++, right--) {
13                     char temp = buffer[left];
14                     buffer[left] = buffer[right];
15                     buffer[right] = temp;
16                 }
17                 right = i + 1;
18             }
19         }
20         return new String(buffer);
21     }
22 }
原文地址:https://www.cnblogs.com/kexinxin/p/10373986.html