LeetCode345. Reverse Vowels of a String

本文介绍了一种算法,该算法接收一个字符串作为输入,并仅反转字符串中的元音字母,而不改变辅音字母的位置。通过实例展示了如何使用Python实现这一功能,包括使用列表和集合来跟踪元音字母及其位置,以及如何利用正则表达式简化实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Write a function that takes a string as input and reverse only the vowels of a string.

Example 1:

Input: "hello"
Output: "holle"

Example 2:

Input: "leetcode"
Output: "leotcede"

Note:
The vowels does not include the letter "y".


思路:建立两个列表,一个是存储遇到的元音字母,一个存储的是元音字母的位置。然后把位置列表倒置,再把元音字母按新的顺序(倒置后的顺序)替换原字符串中的字母。

中间用到了几个方法:set(字符串)可以将字符串存储为单个不重复字母。(用{}存储,不是很理解)

因为字符串不能进行字母替换,所以用list()转为列表,在用join()转为字符串

class Solution:
    def reverseVowels(self, s):
        """
        :type s: str
        :rtype: str
        """
        vowels = set('aeiouAEIOU')
        v=[]
        l=[]
        for i,char in enumerate(s):
            if char in vowels:
                v.append(char)
                l.append(i)
        slist=list(s)
        l.reverse()
        
        for i in range(len(l)):
            slist[l[i]] = v[i]
            
        return ''.join(slist)

也看到大佬用re.sub(),re.findall()方法做,不过这里用到了正则模式字符串,不是很懂。记录一下以后学习。

def reverseVowels(self, s):
    vowels = re.findall('(?i)[aeiou]', s)
    return re.sub('(?i)[aeiou]', lambda m: vowels.pop(), s)
def reverseVowels(self, s):
    vowels = (c for c in reversed(s) if c in 'aeiouAEIOU')
    return re.sub('(?i)[aeiou]', lambda m: next(vowels), s)

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值