刷完LeetCode题库——557. 反转字符串中的单词 III

97 阅读1分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第22天,点击查看活动详情

题目详情

LeetCode题库序号 557. 反转字符串中的单词 III ,难度为 简单

Tag : 「双指针」

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

示例 1:

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

示例 2:

输入: s = "God Ding"
输出: "doG gniD"

提示:

  • 1 <= s.length <= 5 * 104
  • s 包含可打印的 ASCII 字符。
  • s 不包含任何开头或结尾空格。
  • s 里 至少 有一个词。
  • s 中的所有单词都用一个空格隔开。

双指针

题解思路:这道题目就是双指针的稍微复杂版,首先我们知道怎么使用双指针去替换单个字符串。单个字符的替换的话就是定位首尾的两个指针,然后进行迭代循环,交换两个指针的值,这道题目就是在这个的基础上,我们先进行空字符串的切割,然后应用单字符串的双指针,保存反转后的单字符串,最后再连接返回即可。我使用的这种方式空间复杂度和时间复杂度都会比较高的,但是非常的容易理解双指针的解法。详情见以下代码:

题解代码

class Solution {
    public String reverseWords(String s) {
        String[] splitArr = s.split(" ");
        List<String> words = new ArrayList<String>();
        for (String string: splitArr) {
            int i = 0;
            int j = string.length() - 1;
            char[] array = string.toCharArray();
            while (i < j) {
                char temp = array[i];
                array[i] = array[j];
                array[j] = temp;
                i++;
                j--;
            }
            words.add(new String(array));
        }
        return String.join(" ", words);
    }
}

结尾

我的"刷完LeetCode题库"系列文章的第 No.557 序号的题目,本次刷题之旅系列开始于 2022-06-12,因为LeetCode上部分是有锁题,我自己的目标是将先把所有不带锁的题目刷完。自己能够通过这次刷题之旅勉励自己,并且提升逻辑思维能力。这个系列的文章就是会见证我自己的一个成长过程!

思路虽然不是最优的,但是我会尽我所能!

为了让我自己的刷题之旅不中断,我特地建立了相关的仓库,来记录我自己的刷题之旅。 github.com/jackpan123/…