j

jaryue

V1

2023/04/23阅读:17主题:默认主题

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

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


题目描述

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

来源:力扣(LeetCode) 链接:https://leetcode.cn/problems/reverse-words-in-a-string-iii 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

解题思路

法1

字符串分割+双指针\

  1. 定义反转字符串函数
  • 使用双指针法,一个指向首位,一个指向末尾,交换两个位置,指针不断向中间移动,直到相等或大小关系交换(反转完成)结束.
  1. 字符串分隔:使用原生函数将字符串分隔成子串
  2. 分别对每个字符串进行反转
strings.Split(s, " ")
  • 时间复杂度(O(n))
  • 空间复杂度(O(n))

执行结果

法1

// 反转字符串
func reverseString(s string) string {
 runes := []rune(s)
 for i, j := 0len(runes)-1; i < len(runes)/2; i, j = i+1, j-1 {
  runes[i], runes[j] = runes[j], runes[i]
 }
 return string(runes)
}
//反转每个单词
func reverseWords(s string) string {
 words := strings.Split(s, " ")
 s = ""
 for i := 0; i < len(words)-1; i++ {
  s = s + reverseString(words[i]) + " "
 }
 return s + reverseString(words[len(words)-1])
}

执行结果: 通过 显示详情 查看示例代码 添加备注

执行用时: 24 ms , 在所有 Go 提交中击败了 14.08% 的用户 内存消耗: 7.2 MB , 在所有 Go 提交中击败了 9.16% 的用户 通过测试用例: 29 / 29 炫耀一下:

法2


法3


分类:

后端

标签:

后端

作者介绍

j
jaryue
V1