leetcode_345 反转字符串中的元音字母

152 阅读1分钟

要求

给你一个字符串 s ,仅反转字符串中的所有元音字母,并返回结果字符串。

元音字母包括 'a'、'e'、'i'、'o'、'u',且可能以大小写两种形式出现。

示例 1:

输入:s = "hello"
输出:"holle"

示例 2:

输入:s = "leetcode"
输出:"leotcede"

提示:

  • 1 <= s.length <= 3 * 105
  • s 由 可打印的 ASCII 字符组成

核心代码

class Solution:
    def reverseVowels(self, s: str) -> str:
        vowels = 'aeiouAEIOU'
        left,right = 0,len(s) - 1
        s_list = list(s)
        while left < right:
            if s[right] not in vowels:
                right -= 1
            elif s[left] not in vowels:
                left += 1
            else:
                s_list[left],s_list[right] = s_list[right],s_list[left]
                left += 1
                right -= 1
        return "".join(s_list)

另一思路

class Solution:
    def reverseVowels(self, s: str) -> str:
        temp = []
        for v in s:
            if v in "aeiouAEIOU":
                temp.append(v)
        
        res = ""
        for i in range(len(s)):
            if s[i] in "aeiouAEIOU":
                res += temp.pop()
            else:
                res += s[i]
        return res

image.png

解题思路:第一种解法:和344题翻转字符串的思路差不多,使用左右指针的方式,只不过在交换的之前,先判断下是不是元音字母;第二种解法:我们使用栈来对元音字母进行存储,然后遍历字符串,遇到元音字母,出栈拼接即可。