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 @ 2024-04-10 20:56  Junior_bond  阅读(12)  评论(0)    收藏  举报