345 反转字符串中的元音字母
问题
编写一个函数,以字符串作为输入,反转该字符串中的元音字母。
示例
输入:‘hello’
输出:’holle’
输入:‘leetcode’
输出:‘leotcede’
解释:对于字符串中的元音字母,镜像交换
‘hello’ 有元音字母‘e’, ‘o’,所以交换’e’ 和 ’o’,变为 ‘holle’
‘leetcode’有元音字母’e’, ‘e’, ‘o’, ‘e’,镜像翻转为 ‘e’, ‘o’, ‘e’, ‘e’,对应字符串的位置产生交换,变为‘leotcede’
思路
- 先找出字符串中的元音字母,该题中认为元音字母的大小写区分
- 在字符串对应位置交换元音字母
还有一种用双指针的方式,但是时间复杂度一样都是 O ( n ) O(n) O(n),但空间复杂度应该会小一些
代码
class Solution:
# 存储元音字母
vowel = ['a', 'A','e', 'E', 'i', 'I', 'o', 'O', 'u', 'U']
def reverseVowels(self, s: str) -> str:
res = list(s) # 方便替换
idxs = [i for i in range(len(s)) if s[i] in self.vowel] # 存储字符串中元音字母的索引
ls = 0; le = len(idxs)-1 # 交换索引,应该可以说是双向指针
while ls < le:
i = idxs[ls]; j = idxs[le]
res[i] = s[j] # 交换
res[j] = s[i] # 交换
# 指针
ls += 1
le -= 1
ss = '' # 格式转换
for r in res:
ss = ss + r
return ss
反思
阅读理解有待提高,最开始没有理解这个题目的要求。参数精简。