# 左右指针
# 因为元音字母的出现并非对称的,所以左右指针一直走到出现为止,
# 然后进行交换,添加到存储空间中,依次循环即可。
class Solution:
def reverseVowels(self, s: str) -> str:
vowels = 'aeiouAEIOU'
s_list = list(s)
n = len(s)
left, right = 0, n - 1
while left < right:
while left < n and s_list[left] not in vowels:
left += 1
while right > 0 and s_list[right] not in vowels:
right -= 1
if left < right:
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:
vowels = 'aeiouAEIOU'
index, value = [], []
for i in range(len(s)):
if s[i] in vowels:
index.append(i)
value.append(s[i])
s_list = list(s)
value_sort = value[::-1]
for i in range(len(index)):
s_list[index[i]] = value_sort[i]
return ''.join(s_list)