算法实现之反转字符串中的单词 III

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

示例 1:

输入: “Let’s take LeetCode contest”
输出: “s’teL ekat edoCteeL tsetnoc”

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

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

Java实现

public class Solution {

    public String reverseWords(String str) {
        char[] buffer = str.toCharArray();
        int length = buffer.length;
        int left = 0, right = 0;
        boolean last;
        for (int i = 0; i < length; i++) {
            last = i == length - 1;
            if (buffer[i] == ' ' || last) {
                left = right;
                right = i - (last ? 0 : 1);
                for (; left < right; left++, right--) {
                    char temp = buffer[left];
                    buffer[left] = buffer[right];
                    buffer[right] = temp;
                }
                right = i + 1;
            }
        }
        return new String(buffer);
    }

}

原题地址:
https://leetcode-cn.com/problems/reverse-words-in-a-string-iii/description/

你可能感兴趣的:(算法实现之反转字符串中的单词 III)