编写 Python 程序反转给定字符串中的元音

2024 年 8 月 29 日 | 阅读 3 分钟

在本教程中,我们将编写 Python 程序来反转给定字符串中的元音字母。这是字符串中一个常见的面试问题。让我们来理解问题陈述。

问题陈述

给定一个字符串 s,仅反转字符串中的所有元音字母并返回它。

元音字母为 'a'、'e'、'i'、'o' 和 'u',它们可以是大写或小写,并且可以出现多次。

示例 1

输入:s = "hello"

输出:“holle”

示例 2

输入:s = "leetcode"

输出:“leotcede”

我们可以使用多种方法来解决这个问题。

解决方案 - 1

让我们看下面的解决方案 -

示例 -

输出

JivoTpaant

解释 -

在上面的代码中,我们定义了一个名为 reverseVowels 的函数,它接受一个字符串 s 作为输入,并返回一个元音字母被反转的字符串。代码工作原理如下:

  1. 使用 list() 函数将输入字符串 s 转换为字符列表,这允许我们稍后修改单个字符。
  2. 初始化两个变量 i 和 j。i 表示 s 中第一个字符的索引,j 表示 s 中最后一个字符的索引。
  3. 代码进入一个 while 循环,只要 i 小于 j,循环就会继续。
  4. 循环内部有几个条件语句来处理不同的情况:
  5. 如果索引 i 处的字符是小写或大写元音字母 (s[i] in ['a','e','i','o','u', 'A','E','I','O','U']) 并且索引 j 处的字符是大写元音字母 (s[j] in ['A','E','I','O','U']),则使用元组赋值交换位置 i 和 j 处的字符 (s[i],s[j]=s[j],s[i])。
  6. 如果索引 i 处的字符不是元音字母,而索引 j 处的字符是元音字母,则 i 递增 (i = i+1),将指针移动到字符串开头后的下一个字符。
  7. 如果索引 i 处的字符是元音字母,而索引 j 处的字符不是元音字母,则 j 递减 (j = j-1),将指针移动到字符串末尾前的下一个字符。
  8. 如果以上任何条件都不满足,则更新 i 和 j (i=i+1 和 j = j-1) 以继续搜索元音字母。
  9. 一旦 while 循环完成,使用 "".join(s) 方法将修改后的列表 s 转换回字符串,其中空字符串用作字符之间的分隔符。
  10. 将结果字符串从函数返回。

最后,使用参数 'JavaTpoint' 调用该函数并打印结果。

解决方案 - 2

让我们理解下面的例子。

示例 -

输出

JivoTpaant

解释 -

在上面的代码中 -

  1. 我们初始化一个名为 vowels 的空字符串,用于存储在 str1 中遇到的元音字母。
  2. 迭代 str1 中的每个字符 (char)。
  3. 通过使用 in 运算符检查 char 是否存在于字符串 "aeiouAEIOU" 中来判断 char 是否为元音字母。
  4. 如果 char 是元音字母,则使用 += 运算符将其连接到 vowels 字符串。
  5. 初始化一个名为 result_string 的空字符串,用于存储最终结果。
  6. 再次迭代 str1 中的每个字符 (char)。
  7. 判断 char 是否为元音字母。
  8. 如果 char 是元音字母,则使用 += 将 vowels 字符串的最后一个字符连接到 result_string。
  9. 通过使用切片 (vowels = vowels[:-1]) 从 vowels 字符串中删除最后一个字符。
  10. 如果 char 不是元音字母,则直接将其连接到 result_string。
  11. 对 str1 中的每个字符重复步骤 6-10。
  12. 返回 result_string。