Leetcode 345:反转字符串中的元音字母(最详细解决方案!!!)

编写一个函数,以字符串作为输入,反转该字符串中的元音字母。

示例 1:
给定 s = “hello”, 返回 “holle”.

示例 2:
给定 s = “leetcode”, 返回 “leotcede”.

注意:
元音字母不包括 “y”.

解题思路

参照这Leetcode 125:验证回文串、Leetcode 344:验证回文串、Leetcode 167:两数之和 II - 输入有序数组几篇文章中的解题思路

class Solution:
    def reverseVowels(self, s):
        """
        :type s: str
        :rtype: str
        """
        vowels = ['a', 'u', 'e', 'i', 'o', 'A', 'U', 'E', 'I', 'O']
        l = 0
        r = len(s) - 1
        s = list(s)
        while l < r:
            if s[l] not in vowels:
                l += 1
                continue

            if s[r] not in vowels:
                r -= 1
                continue

            s[l], s[r] = s[r], s[l]
            l += 1
            r -= 1
        return ''.join(s)

这个问题还有一种解题思路就是建立一个stack,遍历s,将s中的元音字母添加到stack中,然后再遍历一遍s,这个时候我们如果碰到元音字母的话,我们就将stack的尾部元素弹出,将它替换给遍历到的这个元素。

class Solution:
    def reverseVowels(self, s):
        """
        :type s: str
        :rtype: str
        """
        stack = list()
        vowels = set(['a', 'u', 'e', 'i', 'o', 'A', 'U', 'E', 'I', 'O'])
        result = list()
        for ch in s:
            if ch in vowels:
                stack.append(ch)
            result.append(ch)
        
        for i, ch in enumerate(result):
            if ch in vowels:
                result[i] = stack.pop()
             
        return ''.join(result)

一个更pythonic的写法

class Solution:
    def reverseVowels(self, s):
        """
        :type s: str
        :rtype: str
        """
        vowels = set(['a', 'u', 'e', 'i', 'o', 'A', 'U', 'E', 'I', 'O'])
        p = [i for i in s if i in vowels]
        return ''.join([i if i not in vowels else p.pop() for i in s])

该问题的其他语言版本添加到了我的GitHub Leetcode

如有问题,希望大家指出!!!

你可能感兴趣的:(Problems,leetcode解题指南)