携手创作,共同成长!这是我参与「掘金日新计划 · 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/… 。