• 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. }

  • 相关阅读:
    基于Python实现的类Pascal语言的词法分析和语法分析器
    基础概念回顾:云原生应用交付
    排序算法总结
    openGauss学习笔记-94 openGauss 数据库管理-访问外部数据库-mysql_fdw
    三十二、Java LinkedList
    WPF使用Iconfont字符串的操作方法
    day02_numpy_demo
    c++一些疑难点
    FFplay文档解读-39-视频过滤器十四
    delphi 使用TFlowPanel容器,实现对内含控件进行自动排版
  • 原文地址:https://blog.csdn.net/qq_37102984/article/details/126292103