码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • LeetCode 557. 反转字符串中的单词 III


    557. 反转字符串中的单词 III

    难度简单469

    给定一个字符串 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 中的所有单词都用一个空格隔开。

    思路:

    • 先根据空格将s拆分为字符串数组
    • 字符串数组中的元素交换位置:字符串是常量不能随意修改,所以要再转化为[]byte数组后才能进行下标操作
    • 将交换位置后的字符串存入res字符串数组中,并对其进行空格拼接

    时间复杂度:O(N)

    空间复杂度:方法1 O(N),方法2 O(1)

    1. // 方法1:空间复杂度O(N)
    2. // 先根据空格将s拆分为字符串数组
    3. // 字符串数组中的元素交换位置:字符串是常量不能随意修改,所以要再转化为[]byte数组后才能进行下标操作
    4. // 将交换位置后的字符串存入res字符串数组中,并对其进行空格拼接
    5. func reverseWords(s string) string {
    6. strArr := strings.Split(s, " ")
    7. res := make([]string, 0)
    8. for _, ss := range strArr {
    9. byteSs := []byte(ss)
    10. for l, r := 0, len(byteSs)-1; l < r; {
    11. byteSs[l], byteSs[r] = byteSs[r], byteSs[l]
    12. l++
    13. r--
    14. }
    15. res = append(res, string(byteSs))
    16. }
    17. return strings.Join(res, " ")
    18. }
    19. // 方法2 原地修改:空间复杂度O(1)
    20. func reverseWords(s string) string {
    21. // byteS := []byte(s)
    22. reverseString := func(bs []byte) {
    23. for left, right := 0, len(bs) - 1; left < right; {
    24. bs[left], bs[right] = bs[right], bs[left]
    25. left++
    26. right--
    27. }
    28. }
    29. byteS := []byte(s)
    30. for i, j := 0, 0; i < len(byteS); i = j {
    31. for j < len(byteS) && s[j] != ' ' {
    32. j++
    33. }
    34. reverseString(byteS[i:j])
    35. j++ // 跳到下一个单词起点
    36. }
    37. return string(byteS)
    38. }

  • 相关阅读:
    Vue向pdf文件中添加二维码
    Unity VideoPlayer 指定位置开始播放
    基础化学试题A卷
    mmpose关键点(二):构建自己的训练集
    道可云元宇宙每日资讯|《江苏省元宇宙产业发展行动计划》发布
    堆的应用:堆排序及TopK问题
    后台管理----新建和编辑hooks 封装
    爬虫实例——从mindat上爬取矿石图片
    JDK8 ThreadPoolExecutor 线程池源码深度解析(附几种线程池的扩展方式)
    8 种 Python 定时任务的解决方案
  • 原文地址:https://blog.csdn.net/qq_37102984/article/details/126292103
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号