LeetCode与本地终端输出不一致求助——反转字符串元音字母
问题原因与解决方案
你的代码在本地运行正常但LeetCode上输出错误,核心原因是使用字典存储元音字符的索引和值时,在Python 3.7之前的版本中字典不保留插入顺序。这会导致后续获取的键(索引)和值(元音)的顺序混乱,最终替换时映射关系错误。
修正后的代码
def reverseVowels(s): vowels_set = {'a', 'e', 'i', 'o', 'u', 'A', 'E', 'I', 'O', 'U'} indices = [] vowels = [] # 按顺序收集元音的索引和字符 for idx, char in enumerate(s): if char in vowels_set: indices.append(idx) vowels.append(char) # 反转元音列表 reversed_vowels = vowels[::-1] # 将字符串转为列表以便修改(Python字符串不可变) s_list = list(s) # 替换对应位置的元音 for idx, vowel in zip(indices, reversed_vowels): s_list[idx] = vowel return ''.join(s_list)
关键改进点
- 使用列表替代字典:用两个列表分别按顺序存储元音的索引和字符,确保顺序与原字符串中出现的顺序一致,不受Python版本影响。
- 反转元音列表:直接反转收集到的元音列表,保证原字符串中第一个元音对应反转后的最后一个元音,以此类推。
- 列表操作更高效:将字符串转为列表进行修改,避免每次修改字符串都创建新对象,提升性能。
测试示例:
输入 "race a car",输出 "raca e car",符合预期。
内容的提问来源于stack exchange,提问作者Alexander Nord
相关产品推荐
相关产品推荐

