leedcode-反转字符串中的元音字母

自己写的,双指针,一次通过

复制代码
class Solution:
    def reverseVowels(self, s: str) -> str:
        # 将输入的字符串转换为列表
        s_list = list(s)
        
        # 定义元音字母列表
        vowels = ['a', 'e', 'i', 'o', 'u', 'A', 'E', 'I', 'O', 'U']
        
        # 获取字符串的长度
        n = len(s_list)
        
        # 初始化左指针和右指针,分别指向字符串的开头和末尾
        left = 0
        right = n - 1
        
        # 初始化左指针和右指针是否指向元音字母的标志
        left_vowel = False
        right_vowel = False
        
        # 使用双指针法来反转字符串中的元音字母
        while left < right:
            # 如果左指针指向的字符是元音字母,则将 left_vowel 标志设置为 True
            if s_list[left] in vowels:
                left_vowel = True
            else:
                # 否则,将左指针向右移动一位
                left += 1
                
            # 如果右指针指向的字符是元音字母,则将 right_vowel 标志设置为 True
            if s_list[right] in vowels:
                right_vowel = True
            else:
                # 否则,将右指针向左移动一位
                right -= 1
                
            # 如果左指针和右指针都指向了元音字母
            if left_vowel and right_vowel:
                # 交换左指针和右指针指向的字符
                s_list[left], s_list[right] = s_list[right], s_list[left]
                
                # 重置左指针和右指针是否指向元音字母的标志
                left_vowel = False
                right_vowel = False
                
                # 同时将左指针向右移动一位,右指针向左移动一位
                left += 1
                right -= 1
                
        # 将列表转换回字符串并返回
        s_str = ''.join(s_list)
        return s_str
复制代码

 gpt优化代码,精简:

复制代码
class Solution:
    def reverseVowels(self, s: str) -> str:
        # 将输入的字符串转换为列表
        s_list = list(s)
        
        # 定义元音字母列表
        vowels = set('aeiouAEIOU')
        
        # 初始化左指针和右指针,分别指向字符串的开头和末尾
        left, right = 0, len(s_list) - 1
        
        # 使用双指针法来反转字符串中的元音字母
        while left < right:
            # 如果左指针指向的字符不是元音字母,则将左指针向右移动一位
            if s_list[left] not in vowels:
                left += 1
            # 如果右指针指向的字符不是元音字母,则将右指针向左移动一位
            elif s_list[right] not in vowels:
                right -= 1
            # 如果左右指针同时指向元音字母
            else:
                # 交换左右指针指向的字符
                s_list[left], s_list[right] = s_list[right], s_list[left]
                # 同时将左指针向右移动一位,右指针向左移动一位
                left += 1
                right -= 1
                
        # 将列表转换回字符串并返回
        return ''.join(s_list)
复制代码

 

posted @   Junior_bond  阅读(5)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示