python-leetcode-917. 仅仅反转字母

部署运行你感兴趣的模型镜像

917. 仅仅反转字母 - 力扣(LeetCode)

可以使用双指针方法来解决这个问题。以下是 Python 代码实现:

def reverseOnlyLetters(s: str) -> str:
    s = list(s)  # 将字符串转换为列表,方便修改
    left, right = 0, len(s) - 1

    while left < right:
        if not s[left].isalpha():  # 左指针遇到非字母字符
            left += 1
        elif not s[right].isalpha():  # 右指针遇到非字母字符
            right -= 1
        else:
            s[left], s[right] = s[right], s[left]  # 交换字母
            left += 1
            right -= 1

    return "".join(s)

# 测试
print(reverseOnlyLetters("a-bC-dEf-ghIj"))  # 输出 "j-Ih-gfE-dCba"
print(reverseOnlyLetters("Test1ng-Leet=code-Q!"))  # 输出 "Qedo1ct-eeLg=ntse-T!"

代码解析:

  1. 转换为列表:字符串在 Python 中是不可变的,因此先转换为列表以便进行交换操作。

  2. 使用双指针

    • left 指向字符串开头,right 指向字符串结尾。

    • 如果 left 不是字母,则 left 向右移动。

    • 如果 right 不是字母,则 right 向左移动。

    • 如果两者都是字母,则交换,并向中间靠拢。

  3. 返回结果:最终将列表拼接成字符串返回。

该算法的时间复杂度为 O(n),空间复杂度为 O(n)(主要是字符串转换为列表的额外空间)。

您可能感兴趣的与本文相关的镜像

Python3.9

Python3.9

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值