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

97 阅读1分钟

题目描述

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

示例:

输入:"Let's take LeetCode contest"
输出:"s'teL ekat edoCteeL tsetnoc"

提示

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

解题

刚开始想用数组挺蠢的,看结尾的第一次提交,通过用了很长时间

1.使用双指针之间的数组来确定需要转换的数组.然后进行翻转

流程:1.刚开始两个指针都从头部开始,右指针探路,当遇到空格时触发

2.触发翻转时,右指针需要向前一位,去掉空格

3.翻转完成,左指针移动到右指针的后一位,直接跳过当前空格.右指针继续探路

4.当右指针到达数组尾部,直接再次进行翻转,然后直接退出循环

public static String reverseWords(String s) {
        // 需要定位空格,然后将指针之间的单词作为数组进行交换
        char[] chars = s.toCharArray();
        int left = 0;
        int right = 0;
        int length = chars.length -1;
        char temp = 0;
        while (left <= right) {
            // 当大于长度,转换剩下的数组
            if (right > length) {
                reverse2(chars,left,right -1,temp);
                break;
            }
            char aChar = chars[right];
            // 右指针碰到空格,开始操作
            if (' '==chars[right]) {
                // 翻转
                reverse2(chars,left,right -1,temp);
                left = right + 1;
            }
            right ++;
        }
        return String.valueOf(chars);
    }

    public static void reverse2(char[] charss,int left,int right,char temp) {
        while (left < right) {
            temp = charss[left];
            charss[left] = charss[right];
            charss[right] = temp;
            left ++;
            right --;
        }
    }

image.png