翻轉(zhuǎn)字符串中的單詞 III
- https://leetcode.cn/problems/reverse-words-in-a-string-iii/
描述
給定一個字符串 s ,你需要反轉(zhuǎn)字符串中每個單詞的字符順序,同時仍保留空格和單詞的初始順序。
示例 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 不包含任何開頭或結(jié)尾空格。
- s 里 至少 有一個詞。
- s 中的所有單詞都用一個空格隔開。
Typescript版算法實現(xiàn)
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,是有問題的,能滿足示例字符串,但是滿足不了一些特殊字符串,有一些英語句子中可以加一些特指字符,比如 @,$, \ 等,語法和寫法上會有區(qū)別,最簡單的來說 , .等字符都沒有囊括在內(nèi)
相關(guān)api
const { split, match } = String.prototype
const { map, reverse, join } = Array.prototype
總結(jié)
- 注意邊界非空判斷
- 將字符串轉(zhuǎn)換成數(shù)組,這里是一維數(shù)組
- 在數(shù)組內(nèi)的每個字符串元素轉(zhuǎn)換成數(shù)組,這里是第二維數(shù)組
- 在單個字符串數(shù)組元素借助reverse這個api進行反轉(zhuǎn)
- 將單個字符串數(shù)組元素再次轉(zhuǎn)換成字符串元素
- 將處理好二維數(shù)組元素轉(zhuǎn)換好的字符串在一維數(shù)組內(nèi)作為元素返回
- 注意:使用for循環(huán)來做,反而麻煩,代碼量大,盡量不用
Python3 版算法實現(xiàn)
1 )簡潔版本
class Solution:
def reverseWords(self, s):
return " ".join(word[::-1] for word in s.split(" "))
2 )使用 enumerate文章來源:http://www.zghlxwxcb.cn/news/detail-427574.html
class Solution:
def reverseWords(self, s: str) -> str:
lt = s.split()
# 使用 enumerate 將數(shù)組轉(zhuǎn)換成 枚舉結(jié)構(gòu)
for i, w in enumerate(lt):
lt[i] = w[:: -1] # 單位內(nèi)反轉(zhuǎn)
return " ".join(lt) # 轉(zhuǎn)換成字符串
Golang 版算法實現(xiàn)
1 )字符串和數(shù)組的組合文章來源地址http://www.zghlxwxcb.cn/news/detail-427574.html
func reverseWords(s string) string {
// 拆分數(shù)組
words := strings.Split(s, " ")
// 倒序輸出
for i := 0; i < len(words); i++ {
words[i] = reverse(words[i])
}
// 最終結(jié)果
return strings.Join(words, " ")
}
// 對字符串進行反轉(zhuǎn)
func reverse(word string) string {
// 轉(zhuǎn)成數(shù)組
ans := []byte(word)
// 獲取前后索引
l, r := 0, len(ans)-1
// 前后翻轉(zhuǎn)
for l < r {
ans[l], ans[r] = ans[r], ans[l]
l++
r--
}
// 獲取結(jié)果
return string(ans)
}
到了這里,關(guān)于數(shù)據(jù)結(jié)構(gòu)與算法之字符串: Leetcode 557. 反轉(zhuǎn)字符串中的單詞 III (Typescript版)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!