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