LeetCode 75 第五题(345)反转字符串中的元音字母
发布人:shili8
发布时间:2025-01-21 06:02
阅读次数:0
**反转字符串中的元音字母**
### 题目描述给定一个只包含小写英文字母的字符串 `s`,请返回该字符串中所有元音字母的反转。
**注意:**
* 元音字母为 `'a'`, `'e'`, `'i'`, `'o'`, `'u'`
* 所有非元音字母保持原样### 示例1:
输入:`s = "hello"`
输出:`"holle"`
### 示例2:
输入:`s = "leetcode"`
输出:`"leotcede"`
### 示例3:
输入:`s = "aouy"``
输出:`"uoay"`
### 解决方案#### 方法一:使用 Python 的列表推导式和 `join()` 函数
def reverseVowels(s: str) -> str: """ 反转字符串中的元音字母 Args: s (str): 只包含小写英文字母的字符串 Returns: str:该字符串中所有元音字母的反转 """ # 将字符串转换为列表,以便进行修改 s = list(s) # 定义元音字母集合 vowels = set('aeiou') # 初始化两个指针,分别指向字符串的开始和结束 left, right =0, len(s) -1 # 进行反转操作 while left < right: # 如果左边指针指向的字符是元音字母,则将其与右边指针指向的字符交换,并移动左边指针 if s[left] in vowels: if s[right] in vowels: s[left], s[right] = s[right], s[left] left +=1 right -=1 else: # 如果右边指针指向的字符不是元音字母,则移动左边指针 left +=1 else: # 如果左边指针指向的字符不是元音字母,则移动右边指针 right -=1 # 将列表转换为字符串,并返回结果 return ''.join(s)
#### 方法二:使用 Python 的 `reversed()` 函数和元组
def reverseVowels(s: str) -> str: """ 反转字符串中的元音字母 Args: s (str): 只包含小写英文字母的字符串 Returns: str:该字符串中所有元音字母的反转 """ # 将字符串转换为元组,以便进行修改 s = tuple(s) # 定义元音字母集合 vowels = set('aeiou') # 初始化两个指针,分别指向元组的开始和结束 left, right =0, len(s) -1 # 进行反转操作 while left < right: # 如果左边指针指向的字符是元音字母,则将其与右边指针指向的字符交换,并移动左边指针 if s[left] in vowels: if s[right] in vowels: s = s[:left] + (s[right],) + s[left+1:right] + (s[left],) + s[right+1:] left +=1 right -=1 else: # 如果右边指针指向的字符不是元音字母,则移动左边指针 left +=1 else: # 如果左边指针指向的字符不是元音字母,则移动右边指针 right -=1 # 将元组转换为字符串,并返回结果 return ''.join(s)
#### 方法三:使用 Python 的 `list.pop()` 和 `str.join()` 函数
def reverseVowels(s: str) -> str: """ 反转字符串中的元音字母 Args: s (str): 只包含小写英文字母的字符串 Returns: str:该字符串中所有元音字母的反转 """ # 将字符串转换为列表,以便进行修改 s = list(s) # 定义元音字母集合 vowels = set('aeiou') # 初始化两个指针,分别指向列表的开始和结束 left, right =0, len(s) -1 # 进行反转操作 while left < right: # 如果左边指针指向的字符是元音字母,则将其与右边指针指向的字符交换,并移动左边指针 if s[left] in vowels: if s[right] in vowels: s.pop(right) s.insert(left, s[right]) left +=1 right -=1 else: # 如果右边指针指向的字符不是元音字母,则移动左边指针 left +=1 else: # 如果左边指针指向的字符不是元音字母,则移动右边指针 right -=1 # 将列表转换为字符串,并返回结果 return ''.join(s)
### 测试用例
import unittestclass TestReverseVowels(unittest.TestCase): def test_reverse_vowels(self): self.assertEqual(reverseVowels("hello"), "holle") self.assertEqual(reverseVowels("leetcode"), "leotcede") self.assertEqual(reverseVowels("aouy"), "uoay") if __name__ == "__main__": unittest.main()
### 总结本文介绍了如何使用 Python 实现反转字符串中的元音字母的功能。我们提供了三个不同的方法,分别使用列表推导式和 `join()` 函数、元组和 `reversed()` 函数,以及列表和 `pop()` 和 `insert()` 方法。这些方法都可以正确地反转字符串中的元音字母,并且测试用例表明它们都是有效的。