一、题目
给你一个字符串 s
,仅反转字符串中的所有元音字母,并返回结果字符串。
元音字母包括 'a'
、'e'
、'i'
、'o'
、'u'
,且可能以大小写两种形式出现不止一次。
示例 1:
输入:s = "IceCreAm"
输出:"AceCreIm"
解释:
s
中的元音是 ['I', 'e', 'e', 'A']
。反转这些元音,s
变为 "AceCreIm"
.
示例 2:
输入:s = "leetcode"
输出:"leotcede"
提示:
1 <= s.length <= 3 * 105
s
由 可打印的 ASCII 字符组成
二、分析思路
-
使用双指针可以高效地解决这个问题
-
通过交换元音字母的位置,实现反转字符串中的元音字母
三、代码实现
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) - 1while 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 += 1right -= 1# 将列表转换回字符串,join 是字符串的一个方法,用于将可迭代对象中的元素连接成一个新的字符串#'' 是一个空字符串,表示在连接元素时,元素之间不插入任何字符。如果需要在元素之间插入分隔符,比如逗号或空格,可以将 '' 替换为其他字符串,例如 ','.join(s)return ''.join(s)