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
字符串分割+双指针\
-
定义反转字符串函数
-
使用双指针法,一个指向首位,一个指向末尾,交换两个位置,指针不断向中间移动,直到相等或大小关系交换(反转完成)结束.
-
字符串分隔:使用原生函数将字符串分隔成子串 -
分别对每个字符串进行反转
strings.Split(s, " ")
-
时间复杂度(O(n)) -
空间复杂度(O(n))
执行结果
法1
// 反转字符串
func reverseString(s string) string {
runes := []rune(s)
for i, j := 0, len(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