LeetCode 151. 翻轉(zhuǎn)字符串里的單詞

151. 翻轉(zhuǎn)字符串里的單詞


題目來(lái)源:https://leetcode-cn.com/problems/reverse-words-in-a-string

題目


給定一個(gè)字符串,逐個(gè)翻轉(zhuǎn)字符串中的每個(gè)單詞。

示例 1:

輸入: "the sky is blue"
輸出: "blue is sky the"

示例 2:

輸入: "  hello world!  "
輸出: "world! hello"
解釋: 輸入字符串可以在前面或者后面包含多余的空格,但是反轉(zhuǎn)后的字符不能包括。

示例 3:

輸入: "a good   example"
輸出: "example good a"
解釋: 如果兩個(gè)單詞間有多余的空格,將反轉(zhuǎn)后單詞間的空格減少到只含一個(gè)。

說明:

  • 無(wú)空格字符構(gòu)成一個(gè)單詞。
  • 輸入字符串可以在前面或者后面包含多余的空格,但是反轉(zhuǎn)后的字符不能包括。
  • 如果兩個(gè)單詞間有多余的空格,將反轉(zhuǎn)后單詞間的空格減少到只含一個(gè)。

解題思路


思路一:利用語(yǔ)言特性

python 語(yǔ)言中提供 split 切割,join 連接等方法,可以直接調(diào)用內(nèi)置方法解決該問題。

具體的步驟:

  • 使用 spilt 將字符進(jìn)行切割,得到字符串列表
  • 使用切片操作反轉(zhuǎn)字符串列表
  • 使用 join 將反轉(zhuǎn)后的字符串列表用空格拼接。

當(dāng)用此方法編寫代碼完成后,可以考慮自己編寫函數(shù)實(shí)現(xiàn),或者換其他思路實(shí)現(xiàn)。

思路二:雙指針

因?yàn)樽罱K結(jié)果需要數(shù)組進(jìn)行倒序后輸出,所以在尾部進(jìn)行雙指針定義,倒序遍歷數(shù)組。

題目中說明【無(wú)空格字符構(gòu)成一個(gè)單詞】。那么按照這個(gè)原則,確定單詞邊界,將單詞添加到定義的列表中。

最終的步驟也是將單詞列表拼接返回。

具體過程如下圖:

雙指針 | 圖解

代碼實(shí)現(xiàn)


語(yǔ)言特性:代碼實(shí)現(xiàn)
class Solution:
    def reverseWords(self, s: str) -> str:
        return ' '.join(s.split()[::-1])

雙指針:代碼實(shí)現(xiàn)
class Solution:
    def reverseWords(self, s: str) -> str:
        # 尾部定義指針
        p = len(s) - 1
        # 定義返回結(jié)果
        ans = []

        while p >= 0:
            # 倒序遍歷,這里先去除尾部空格
            while p >= 0 and s[p] == ' ':
                p -= 1
            # 重置指針
            q = p
            # 這一步防止開頭存在空格,
            # 最終卻把空格添加到返回結(jié)果中
            if q < 0:
                break
            # 確定單詞邊界
            while p >= 0 and s[p] != ' ':
                p -= 1
            # 將單詞放到結(jié)果中
            ans.append(s[p + 1:q + 1])
        # 拼接返回結(jié)果
        return ' '.join(ans)

實(shí)現(xiàn)結(jié)果


語(yǔ)言特性:實(shí)現(xiàn)結(jié)果
語(yǔ)言特性 | 實(shí)現(xiàn)結(jié)果
雙指針:實(shí)現(xiàn)結(jié)果
雙指針 | 實(shí)現(xiàn)結(jié)果

以上就是使用語(yǔ)言特性,或者使用雙指針的方法來(lái)解決《151. 翻轉(zhuǎn)字符串里的單詞》問題的主要內(nèi)容。


歡迎關(guān)注微信公眾號(hào)《書所集錄》

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容