You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何优化这段实现字符串元音翻转的Python代码?

字符串元音翻转代码优化建议

你的代码思路是可行的:先提取所有元音并反转,再遍历原字符串替换元音位置。不过从面试角度,有几个可以优化的点,同时可以提供更高效的双指针实现方案:

原代码的优化细节

  • 变量命名规范:避免使用list这种内置类型名作为变量名,改成chars更清晰;list_vowels可以改为reversed_vowels,语义更明确。
  • 提升查找效率:元音判断用集合set('aeiouAEIOU')代替字符串,集合的成员查询时间复杂度是O(1),比字符串的O(k)(k为字符串长度)更快,处理长字符串时优势更明显。
  • 遍历方式优化:用enumerate遍历字符和索引,比range(len(s))更直观易读。

优化后的原思路代码:

class Solution:
    def reverseVowels(self, s: str) -> str:
        vowels = set('aeiouAEIOU')
        reversed_vowels = [x for x in s if x in vowels][::-1]
        chars = list(s)
        idx = 0
        for i, char in enumerate(chars):
            if char in vowels:
                chars[i] = reversed_vowels[idx]
                idx += 1
        return ''.join(chars)

更高效的双指针实现(面试加分项)

原思路需要额外存储所有元音,空间复杂度为O(n)。双指针法可以在字符串转列表后原地交换元音,空间复杂度优化为O(1)(忽略字符串转列表的必要空间),逻辑也更贴合“翻转”的直观操作:

class Solution:
    def reverseVowels(self, s: str) -> str:
        vowels = set('aeiouAEIOU')
        chars = list(s)
        left, right = 0, len(chars) - 1
        
        while left < right:
            # 左指针从左往右找元音
            while left < right and chars[left] not in vowels:
                left += 1
            # 右指针从右往左找元音
            while left < right and chars[right] not in vowels:
                right -= 1
            # 找到元音后交换位置
            chars[left], chars[right] = chars[right], chars[left]
            left += 1
            right -= 1
        
        return ''.join(chars)

面试中的注意点

  • 要保持对大小写元音的兼容处理,这是题目隐含的要求。
  • 可以先和面试官确认需求边界,比如是否需要处理特殊字符(一般题目默认输入为常规字符串)。
  • 解释代码时,要清晰说明逻辑:双指针从两端向中间遍历,找到元音就交换,直到指针相遇,以此实现元音位置的翻转。

内容的提问来源于stack exchange,提问作者Reds D Moh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 15:55:20