345. 反轉(zhuǎn)字符串中的元音字母(Python)

題目

難度:★★☆☆☆
類型:字符串

編寫(xiě)一個(gè)函數(shù),以字符串作為輸入,反轉(zhuǎn)該字符串中的元音字母。

說(shuō)明:
元音字母為["a", "e", "i", "o", "u", "A", "E", "I", "O", "U"]。

示例

示例 1:
輸入: "hello"
輸出: "holle"

示例 2:
輸入: "leetcode"
輸出: "leotcede"

解答

方案1:雙指針

這道題目以【題目344. 反轉(zhuǎn)字符串】為基礎(chǔ),我們同樣采用雙指針交換的方式進(jìn)行,與上一道題目不同的是,這里限制需要交換的字母是元音字母,因此我們需要進(jìn)行原因字母的搜索過(guò)程,我們這里使用循環(huán)實(shí)現(xiàn),循環(huán)的每一個(gè)控制條件都需要加入指針位置是否合法的判斷,防止左指針移動(dòng)到右指針右邊去。

class Solution:
    def reverseVowels(self, s):
        vowels = ["a", "e", "i", "o", "u", "A", "E", "I", "O", "U"]     # 元音字母列表
        s = list(s)                                                     # 列表化輸入字符串
        left, right = 0, len(s) - 1                                     # 初始化左右指針位置
        while left < right:                                             # 如果指針位置合法
            if s[left] not in vowels:                                   # 如果左指針處字符不是元音字母
                left += 1                                               # 左指針右移
            elif s[right] not in vowels:                                # 如果右指針處字符不是元音字母
                right -= 1                                              # 右指針左移
            else:                                                       # 如果左右指針處字符都是元音字母
                s[left], s[right] = s[right], s[left]                   # 交換位置
                left += 1                                               # 左指針右移
                right -= 1                                              # 右指針左移
        return ''.join(s)                                               # 將列表中的字符連接起來(lái)

方案2:列表

先把元音字母提取出來(lái)放在新的列表vowels_new中并逆序,再遍歷原單詞的列表,遇到元音字母就替換成vowels_new里的元素,最后用將列表中的字符連接成字符串。

class Solution:

    def reverseVowels1(self, s):
        vowels = ["a", "e", "i", "o", "u", "A", "E", "I", "O", "U"]
        vowels_new = []
        for i in range(len(s)):
            if s[i] in vowels:
                vowels_new.append(s[i])         # 添加到元音字母列表
        vowels_new.reverse()                    # 核心操作:逆序
        s = list(s)                             # 
        count = 0
        for i in range(len(s)):                 # 使用逆序后的元音字母一一替換掉原來(lái)元音字母的位置
            if s[i] in vowels:
                s[i] = vowels_new[count]
                count += 1
        return ''.join(s)                       # 將結(jié)果連接起來(lái)

如有疑問(wèn)或建議,歡迎評(píng)論區(qū)留言~

最后編輯于
?著作權(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)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

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