345 反转字符串中元音字母

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

问题

编写一个函数,以字符串作为输入,反转该字符串中的元音字母。

示例

输入:‘hello’
输出:’holle’

输入:‘leetcode’
输出:‘leotcede’

解释:对于字符串中的元音字母,镜像交换

‘hello’ 有元音字母‘e’, ‘o’,所以交换’e’ 和 ’o’,变为 ‘holle’
‘leetcode’有元音字母’e’, ‘e’, ‘o’, ‘e’,镜像翻转为 ‘e’, ‘o’, ‘e’, ‘e’,对应字符串的位置产生交换,变为‘leotcede’

思路

  1. 先找出字符串中的元音字母,该题中认为元音字母的大小写区分
  2. 在字符串对应位置交换元音字母

还有一种用双指针的方式,但是时间复杂度一样都是 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

反思

阅读理解有待提高,最开始没有理解这个题目的要求。参数精简。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值