如何将字符串元音反转的双指针代码改写为嵌套for循环?
如何将元音反转的双指针代码改为嵌套for循环实现?
当然可以用嵌套for循环实现元音反转,虽然这种写法的时间复杂度会从双指针的O(n)上升到O(n²),效率不如原方案,但完全能满足功能需求。
实现思路
外层for循环从左到右遍历每个字符,当遇到元音时,启动内层for循环从字符串末尾向左查找,直到找到另一个未被交换过的元音,交换两者位置后跳出内层循环,继续外层的遍历。为了避免无效循环,当外层循环的索引超过字符串中点时,可以提前终止。
修改后的代码
def reverse_vowels(word): vowels = "aeiou" string = list(word) n = len(string) for i in range(n): # 跳过非元音字符 if string[i].lower() not in vowels: continue # 内层循环从末尾向左找元音 for j in range(n-1, i, -1): if string[j].lower() not in vowels: continue # 找到元音后交换位置 string[i], string[j] = string[j], string[i] # 交换后更新n,避免重复处理已交换的右元音 n = j break # 超过中点后无需继续处理 if i >= n // 2: break return "".join(string) string = input("Enter string: ") print(reverse_vowels(string))
代码说明
- 外层循环
for i in range(n):逐个遍历字符,遇到非元音直接跳过。 - 内层循环
for j in range(n-1, i, -1):从当前字符串的末尾(或上一次交换后的位置)向左查找,直到找到第一个元音。 - 交换后更新
n = j:这样后续内层循环只会在j之前的范围查找,避免重复处理已经交换过的右侧元音。 - 提前终止条件
if i >= n // 2:当左指针超过字符串中点时,所有元音已经完成交换,无需继续循环。
测试示例:输入"hello",输出"holle",和原双指针代码结果一致。
内容的提问来源于stack exchange,提问作者Joe
相关产品推荐
相关产品推荐

