翻转字符串中的单词 III
- https://leetcode.cn/problems/reverse-words-in-a-string-iii/
描述
给定一个字符串 s ,你需要反转字符串中每个单词的字符顺序,同时仍保留空格和单词的初始顺序。
示例 1:
输入:s = "Let's take LeetCode contest"
输出:"s'teL ekat edoCteeL tsetnoc"
示例 2:
输入: s = "God Ding"
输出:"doG gniD"
提示:
- 1 <= s.length <= 5 * 1 0 4 10^4 104
- s 包含可打印的 ASCII 字符。
- s 不包含任何开头或结尾空格。
- s 里 至少 有一个词。
- s 中的所有单词都用一个空格隔开。
Typescript版算法实现
1 )方案1
function reverseWords(s: string): string {
return s.length ? s.match(/[\S]+/g).map((item: string) => {
return item.split('').reverse().join('')
}).join(' ') : ''
};
2 ) 方案2
function reverseWords(s: string): string {
if (!s.length) return ''
return s.split(' ').map((item:string) => {
return item.split('').reverse().join('')
}).join(' ')
}
3 ) 方案3
function reverseWords(s: string): string {
if (!s.length) return ''
return s.split(/\s/g).map((item: string) => {
return item.split('').reverse().join('')
}).join(' ')
}
4 ) 方案4
function reverseWords(s: string): string {
if (!s.length) return ''
return s.match(/[\w']+/g).map((item: string) => {
return item.split('').reverse().join('')
}).join(' ')
}
注意这里的方案4,是有问题的,能满足示例字符串,但是满足不了一些特殊字符串,有一些英语句子中可以加一些特指字符,比如 @,$, \ 等,语法和写法上会有区别,最简单的来说 , .等字符都没有囊括在内
相关api
const { split, match } = String.prototype
const { map, reverse, join } = Array.prototype
总结
- 注意边界非空判断
- 将字符串转换成数组,这里是一维数组
- 在数组内的每个字符串元素转换成数组,这里是第二维数组
- 在单个字符串数组元素借助reverse这个api进行反转
- 将单个字符串数组元素再次转换成字符串元素
- 将处理好二维数组元素转换好的字符串在一维数组内作为元素返回
- 注意:使用for循环来做,反而麻烦,代码量大,尽量不用
Python3 版算法实现
1 )简洁版本
class Solution:
def reverseWords(self, s):
return " ".join(word[::-1] for word in s.split(" "))
2 )使用 enumerate文章来源:https://www.toymoban.com/news/detail-427574.html
class Solution:
def reverseWords(self, s: str) -> str:
lt = s.split()
# 使用 enumerate 将数组转换成 枚举结构
for i, w in enumerate(lt):
lt[i] = w[:: -1] # 单位内反转
return " ".join(lt) # 转换成字符串
Golang 版算法实现
1 )字符串和数组的组合文章来源地址https://www.toymoban.com/news/detail-427574.html
func reverseWords(s string) string {
// 拆分数组
words := strings.Split(s, " ")
// 倒序输出
for i := 0; i < len(words); i++ {
words[i] = reverse(words[i])
}
// 最终结果
return strings.Join(words, " ")
}
// 对字符串进行反转
func reverse(word string) string {
// 转成数组
ans := []byte(word)
// 获取前后索引
l, r := 0, len(ans)-1
// 前后翻转
for l < r {
ans[l], ans[r] = ans[r], ans[l]
l++
r--
}
// 获取结果
return string(ans)
}
到了这里,关于数据结构与算法之字符串: Leetcode 557. 反转字符串中的单词 III (Typescript版)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!