557. Reverse Words in a String III

题目描述和难度

  • 题目描述:

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

示例 1:

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

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

思路分析

求解关键:实现翻转字符数组的部分,最后一定不要忘记把剩下没有翻转的,再翻转一次即可。

参考解答

参考解答1

public class Solution {

    public String reverseWords(String s) {
        int len = s.length();
        if (len == 1) {
            return s;
        }
        char[] charArr = s.toCharArray();
        int begin = 0;
        for (int i = 0; i < len; i++) {
            if (s.charAt(i) == ' ') {
                reverseCharArray(charArr, begin, i - 1);
                begin = i + 1;
            }
        }
        reverseCharArray(charArr, begin, len - 1);
        return String.valueOf(charArr);
    }

    private void reverseCharArray(char[] arr, int l, int r) {
        while (l < r) {
            swap(arr, l, r);
            l++;
            r--;
        }
    }

    private void swap(char[] arr, int l, int r) {
        char temp = arr[l];
        arr[l] = arr[r];
        arr[r] = temp;
    }

    public static void main(String[] args) {
        // 输入: "Let's take LeetCode contest"
        // 输出: "s'teL ekat edoCteeL tsetnoc"
        String s = "Let's take LeetCode contest";
        Solution solution =new Solution();
        String reverseWords = solution.reverseWords(s);
        System.out.println(reverseWords);
    }
}

本篇文章的地址为 https://liweiwei1419.github.io/leetcode-solution/leetcode-0557-reverse-words-in-a-string-iii ,如果我的题解有错误,或者您有更好的解法,欢迎您告诉我 liweiwei1419@gmail.com