Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情。
反转字符串中的单词
题目
给定一个字符串 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) {
StringBuffer sb = new StringBuffer();
int length = s.length();
int i = 0;
while (i < length) {
int start = i;
while (i < length && s.charAt(i) != ' ') {
i++;
}
for (int p = start; p < i; p++) {
sb.append(s.charAt(start + i - 1 - p));
}
while (i < length && s.charAt(i) == ' ') {
i++;
sb.append(' ');
}
}
return sb.toString();
}
}
这是我用java实现的功能,每个题都用不同的解法和写法,我大体整理了一下自己的思路然后就写了,也没有再想其他的方法,如果你有更好的解法,欢迎和我留言,我们一起进步,一起学习数据结构,共同进步,通过这道题能更熟悉双指针的使用和操作。
思路就是使用新的字符串stringbuffer来接收这个结果,然后开始遍历这个字符串,当出现空格的时候就定位到了一个单词,然后反转这个单词追加到新的字符串中,最后再将结果转换为string,这里我们用到了stringbuffer,对于stringbuffer和stringbuild的区别,我在之前的文章中也有介绍,这里就不细说了。
总结
本篇文章主要解决了反转字符串中的单词的问题,主要用到的知识点就是双指针和stringbuffer,当出现空格的时候就定位到了一个单词,然后反转这个单词追加到新的字符串中,最后再将结果转换为string,至于反转,也可以使用stringbuffer的reverse()方法,题目还可以很多的解法,只要动脑思考就能找到新的解决办法,当牵扯到倒置的时候,我们还可以使用栈,我在这里就不实现了,思路是可行的,希望感兴趣的小伙伴们自己实现一下吧,嘿嘿,多动脑,勤思考。