【LeetCode】151. 翻转字符串里的单词(剑指offer 58-I)
151. 翻转字符串里的单词
知识点:字符串;双指针
题目描述
给你一个字符串 s ,逐个翻转字符串中的所有 单词 。
单词 是由非空格字符组成的字符串。s 中使用至少一个空格将字符串中的 单词 分隔开。
请你返回一个翻转 s 中单词顺序并用单个空格相连的字符串。
说明:
输入字符串 s 可以在前面、后面或者单词间包含多余的空格。
翻转后单词间应当仅用一个空格分隔。
翻转后的字符串中不应包含额外的空格
示例
解法一:调用API
要对字符串,包括集合里的常用方法很熟悉,这样就可以直接调用里面的常用方法,比如说去掉首尾空格,比如说以某个字符分割,比方说以某个字符连接,比方说反转;
时间复杂度:O(N);
空间复杂度:O(N);
解法二:手写方法
我们上面主要使用了两个方法:去掉空格,反转;所以我们需要手动实现这两个方法;
- 去掉首尾两边和中间的多余空格;
- 将整个字符串反转;
- 将字符串里单个字符再反转;
需要注意的是,在java里字符串是不可变量,所以需要将其转化为可变的数据结构,比如数组;
时间复杂度:O(N);
空间复杂度:O(N);
解法三:双指针
先把首尾空格去掉,然后定义两个指着,从后往前,分别指向每个单词的首和尾,再加入StringBuilder里;
时间复杂度:O(N);
空间复杂度:O(N);
体会
- 要知道字符串的特点:在java语言中是不可变性。所以只要是需要修改字符串就需要引入新的可变的数据结构,常用StringBuilder。
- 要对String、StringBuilder常用方法熟悉;能想到。
相关链接
翻转字符串里单词
[剑指offer58-I 翻转单词顺序](https://leetcode-cn.com/problems/fan-zhuan-dan-ci-shun-xu-lcof/solution/mian-shi-ti-58-i-fan-zhuan-dan-ci-shun-xu-shuang-z/
__EOF__

本文作者:Curryxin
本文链接:https://www.cnblogs.com/Curryxin/p/15041994.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
本文链接:https://www.cnblogs.com/Curryxin/p/15041994.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了